Scala多个参数列表和部分绑定

时间:2016-06-15 20:52:24

标签: scala

我正在学习Scala Coursera课程,讲座似乎缺少对多个参数列表如何工作的解释。

他声称像下面的averageDamp()函数可以只用第一个参数(f)调用,允许你稍后调用它。看来你需要通过跟随" _"来显式地进行部分绑定。

但是,如果将部分绑定调用传递给另一个函数,该函数接受具有与部分绑定函数匹配的签名的函数,则它将隐式接受它,no" _"必要的。

然而他根本没有使用术语部分绑定,只是说Scala中有一个特殊的语法基本上返回一个闭包,而实际上它只是部分绑定。或者不是?

scala> def averageDamp(f: Double => Double)(x: Double) = (x+f(x))/2

scala> def fixedPoint(f: Double => Double)(x: Int) = f(x)+1

scala> fixedPoint(averageDamp(x=>x+1))(2)
res29: Double = 3.5

scala> averageDamp(x=>x+1)
<console>:19: error: missing arguments for method averageDamp;
follow this method with `_' if you want to treat it as a partially applied function
       averageDamp(x=>x+1)

averageDamp的非部分绑定版本可能类似于:

def averageDamp(f: Double => Double): (Double => Double) = 
    def inner(x: Double): Double =
        (x+f(x))/2    
    inner

我想我的问题是...是averageDamp()的多参数列表版本被传递到另一个函数只是隐式部分绑定...或者这是一种特殊的Scala语法用于返回内部函数/闭合?

1 个答案:

答案 0 :(得分:0)

  

然而他根本没有使用术语部分绑定,只是说Scala中有一个特殊的语法基本上返回一个闭包,实际上它只是部分绑定...是多参数列表averageDamp()的版本被传递到另一个函数只是隐式的部分绑定...或者这是否真的是某种特殊的Scala语法用于返回内部函数/闭包?

为什么你认为它是一个或另一个?仅提供一些参数列表是具有多个参数列表的方法的部分应用程序(通常不是#34;绑定&#34;)的特殊语法。