0

此代码中使用的方法产品如何?

这个函数的结果是 3600

所以 product 接受一个函数: f , f 接受一个 Int 参数,该参数返回一个 Int 参数。

但是 (a: Int, b: Int) 不是表示返回了一个接受两个 Int 参数的函数吗?

我对这一行发生的事情感到困惑: f(a) * product(f)(a + 1, b)

功能齐全:

 def product(f: Int => Int)(a: Int, b: Int): Int =
    if(a > b) 1
    else {
     f(a) * product(f)(a + 1, b)
    }                                        
  product(x => x * x)(3 , 5)  
4

1 回答 1

4

在 Scala 中,方法可以有多个参数列表。在此示例中,该方法product有两个参数列表:(f: Int => Int)(a: Int, b: Int)

第一个参数列表包含一个名为的参数f,该参数属于类型Int => Int(一个接受 anInt并返回 an的函数Int)。

第二个参数列表包含两个名为a和的参数b都是 type Int

表达式product(f)(a + 1, b)product(x => x * x)(3 , 5)简单地使用所有三个参数调用方法。

这样做的好处是你可以product只用第一个参数列表“调用”。然后你会得到一个函数,你可以通过提供第二个参数列表来调用它。例如:

val fn = product(x => x * x)  // only the first parameter list is applied
fn(3, 5)                 // fn is a function which you can pass the second list

product仅使用第一个参数列表的“调用”称为currying

于 2012-10-25T10:03:09.180 回答