Cha*_*ani 4 functional-programming scala
根据我的理解,部分应用的函数是函数,我们可以在不传递所有/一些必需参数的情况下调用它们.
def add(x:Int, y:Int) = x + y
val paf = add(_ :Int, 3)
val paf1 = add(_ :Int, _ :Int)
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,paf1引用部分应用的函数,所有参数都缺失,我可以调用使用:paf1(10,20)并且可以使用原始函数调用add(10,20)
我的问题是,创建一个缺少所有参数的部分应用函数的额外好处是什么,因为调用语法几乎相同?它只是将方法转换为一级函数吗?
Scala的def关键字是如何定义方法和方法不是函数(在Scala中).所以你的add方式不是一流的函数实体paf1,即使它们在生成结果时与它们的参数在语义上是等价的.
Scala会自动使用部分应用程序将方法转换为等效函数,您可以通过扩展示例来看到:
def add(x: Int, y: Int) = x + y
...
val pa2: (Int, Int) => Int = add
pa2: (Int, Int) => Int = <function2>
Run Code Online (Sandbox Code Playgroud)
在这个例子中,这似乎没什么好处,但是在许多情况下,存在非显式约束,表明需要一个函数(或者更确切地说,在其他地方明确指定约束),这些约束允许您简单地给出一个(类型兼容的)方法名称.你需要一个功能的地方.
| 归档时间: |
|
| 查看次数: |
393 次 |
| 最近记录: |