所有: 我是斯卡拉的新手。我并不完全理解书中的咖喱例子和#34; scala中的函数式编程"。 为什么没有像a,b这样的变量的函数可以编译并顺利运行?
16666,67
16666.67
16.666,67
16.666.67
答案 0 :(得分:2)
在Scala中parameterName => body
是一个匿名函数,它接受一个名为parameterName
的参数,其正文为body
。
所以a => b => f(a,b)
是一个参数a
和正文b => f(a,b)
的函数,它本身就是一个带参数b
和正文f(a,b)
的函数。在该主体中a
和b
被定义,因为它们是参数。
如果这样可以减少您的困惑,我们可以使用命名函数重写它:
def curry[A,B,C](f: (A, B) => C): A => (B => C) = {
def f1(a: A) = {
def f2(b: B) = f(a,b)
f2
}
f1
}
答案 1 :(得分:1)
这是因为
a => b => f(a, b)
是匿名函数(lambda)。 a和b是当时没有任何值的变量。它们仅用于构造函数(注意咖喱函数返回类型是另一个函数)