我是Scala的新手,并尝试理解以下代码(源自Scala开头书中的示例)
scala> def w42(f: Int => Int) = f(42) //(A)
w42: (f: Int => Int)Int
scala> w42 (1 +) //(B)
res120: Int = 43
我不明白点(B)处的“1 +”如何被视为一个函数(取1 Int参数,并返回一个Int),它满足(A)点的w42定义?
请您解释或指出一些有答案的文件?
答案 0 :(得分:11)
简单。在Scala 1 + 2
只是1.+(2)
上的语法糖。这意味着Int
有一个名为+
的方法,可以接受Int
:
final class Int extends AnyVal {
def +(x: Int): Int = //...
//...
}
这就是为什么你可以使用1 +
就像它是一个函数一样。意外方法命名较少的示例:
scala> def s42(f: String => String) = f("42")
s42: (f: String => String)String
scala> s42("abc".concat)
res0: String = abc42
BTW从技术上讲, eta-expansion 也涉及将方法转换为函数。