我是Scala的新手,对我来说似乎有点困惑,为什么Scala提供"curried functions",例如:
//curried function
def add(lhs: Int)(rhs: Int) = lhs + rhs
//so we can do partially binding like
val add1 = add(1)_
Run Code Online (Sandbox Code Playgroud)
它令人困惑,因为Scala已经为正常功能提供了"部分应用",例如,
//normal function
def add(lhs: Int, rhs: Int) = lhs + rhs
//also supports partially application
val add1 = add(1, _: Int)
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:除了部分应用之外,除了Scala之外还有其他方面使用curried函数而不是普通函数吗?
EDT1:感谢您的回复.我想我从下面的所有答案中学到了新东西.
把理论动机放在一边(参见:与维基百科中关于currying的部分功能应用的对比),有一个实际的含义.当最后一个参数是代码块时,语法更简单,更易读.
比较以下方法:
def test1(name: String, callback: => Unit) {}
def test2(name: String)(callback: => Unit) {}
Run Code Online (Sandbox Code Playgroud)
第二种方法调用看起来更好,比较:
test("abc", {
//some code
})
test2("abc") {
//some code
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
404 次 |
| 最近记录: |