(1 +)怎么能成为一个功能?

时间:2012-04-03 06:22:40

标签: scala

我是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定义?

请您解释或指出一些有答案的文件?

1 个答案:

答案 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 也涉及将方法转换为函数。