小编Ant*_*ner的帖子

Scala:eta扩展函数值(不是方法)

在尝试scala的eta扩展后,我遇到了一个奇怪的功能.让我们定义一个方法:

scala> def sum(a: Int, b: Int): Int = a + b
sum: (a: Int, b: Int)Int
Run Code Online (Sandbox Code Playgroud)

好的,到现在为止,一切都很好.现在让我们使用eta扩展将其分配给val:

scala> val f = sum _
f: (Int, Int) => Int = $$Lambda$1051/694580932@55638165
Run Code Online (Sandbox Code Playgroud)

现在,奇怪的事情即将到来.我可以再次将eta扩展应用于f,并且它正在工作(但它会为我的方法添加currying):

scala> val g = f _
g: () => (Int, Int) => Int = $$Lambda$1055/1351568309@5602e540
Run Code Online (Sandbox Code Playgroud)

这为什么有效?我认为eta扩展只适用于方法.而且,我注意到这是不可能的:

scala> ((a: Int, b: Int) => a + b: Int) _
<console>:12: error: _ must follow method; cannot follow (Int, Int) => Int
       ((a: Int, b: Int) => a + b: Int) …
Run Code Online (Sandbox Code Playgroud)

methods scala function

5
推荐指数
1
解决办法
134
查看次数

标签 统计

function ×1

methods ×1

scala ×1