我正在讨论Scala样式指南中的多个参数列表.我已经认识到,有两种方式讨好,我想知道用例是什么:
def add(a:Int)(b:Int) = {a + b}
// Works
add(5)(6)
// Doesn't compile
val f = add(5)
// Works
val f = add(5)_
f(10) // yields 15
def add2(a:Int) = { b:Int => a + b }
// Works
add2(5)(6)
// Also works
val f = add2(5)
f(10) // Yields 15
// Doesn't compile
val f = add2(5)_
Run Code Online (Sandbox Code Playgroud)
风格指南错误地暗示这些是相同的,当它们显然不是时.该指南试图说明创建的curried函数,并且,虽然第二种形式不是"by-the-book"currying,但它仍然非常类似于第一种形式(尽管可以说更容易使用,因为你不需要的_)
从那些使用这些形式的人那里,对于何时使用一种形式而不是另一种形式的共识是什么?
这会产生一个匿名函数,正如您所期望的那样(f是一个带有三个参数的函数):
f(_, _, _)
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这不编译,而是给出"缺少参数类型"错误:
f(_, _, 27)
Run Code Online (Sandbox Code Playgroud)
相反,我需要明确指定下划线的类型.Scala不应该能够推断它们,因为它知道函数f的参数类型是什么吗?