多个参数列表,例如def foo(a:Int)(b:Int) = {}
每个列表有多个参数,例如def foo(a:Int, b:Int) = {}
据我所知,它们在语义上是等效的,并且大多数函数式语言只有一种声明多个参数的方法,例如F#。
我能想到支持这两种风格的函数定义的唯一原因是允许使用仅包含一个参数的参数列表进行类似语法的语言扩展。
def withBufferedWriter(file: File)(block: BufferedWriter => Unit)
现在可以使用语法外观来调用
withBufferedWriter(new File("myfile.txt")) { out =>
out write "whatever"
...
}
但是,可能还有其他方法支持使用大括号而不需要多个参数列表。
一个相关问题:为什么在 Scala 中使用多个参数列表被称为“柯里化(Currying)”?柯里化(Currying)通常被定义为一种为了支持部分应用而将 n 元函数变为一元的技术。然而,在 Scala 中,人们可以部分应用函数,而无需制作该函数的“柯里化(Currying)”(多个参数列表,每个参数一个参数)版本。
最佳答案
它使您能够执行以下操作:
scala> def foo(as: Int*)(bs: Int*)(cs: Int*) = as.sum * bs.sum * cs.sum
foo: (as: Int*)(bs: Int*)(cs: Int*)Int
scala> foo(1, 2, 3)(4, 5, 6, 7, 9)(10, 11)
res7: Int = 3906
关于scala - 为什么 Scala 提供多个参数列表和每个列表多个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4684185/