为什么这个fpinscala的例子有效?(没有参数名称)

时间:2017-02-06 14:41:44

标签: scala functional-programming

所有: 我是斯卡拉的新手。我并不完全理解书中的咖喱例子和#34; scala中的函数式编程"。 为什么没有像a,b这样的变量的函数可以编译并顺利运行?

16666,67
16666.67
16.666,67
16.666.67

2 个答案:

答案 0 :(得分:2)

在Scala中parameterName => body是一个匿名函数,它接受一个名为parameterName的参数,其正文为body

所以a => b => f(a,b)是一个参数a和正文b => f(a,b)的函数,它本身就是一个带参数b和正文f(a,b)的函数。在该主体中ab被定义,因为它们是参数。

如果这样可以减少您的困惑,我们可以使用命名函数重写它:

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是当时没有任何值的变量。它们仅用于构造函数(注意咖喱函数返回类型是另一个函数)