我是Scala的新手,并尝试理解以下代码(源自Beginning Scala一书中的示例)
scala> def w42(f: Int => Int) = f(42) //(A)
w42: (f: Int => Int)Int
scala> w42 (1 +) //(B)
res120: Int = 43
Run Code Online (Sandbox Code Playgroud)
我不明白点(B)处的"1 +"如何被视为一个函数(取1个Int参数,并返回一个Int),它满足点(A)的w42定义?
你介意请解释或指出一些有答案的文件吗?
Tom*_*icz 11
简单.在Scala 1 + 2只是一个语法糖1.+(2).这意味着Int有一个名为的方法+接受Int:
final class Int extends AnyVal {
def +(x: Int): Int = //...
//...
}
Run Code Online (Sandbox Code Playgroud)
这就是为什么你可以1 +像使用它一样使用它的原因.意外减少方法命名的示例:
scala> def s42(f: String => String) = f("42")
s42: (f: String => String)String
scala> s42("abc".concat)
res0: String = abc42
Run Code Online (Sandbox Code Playgroud)
BTW从技术上讲,eta-expansion也涉及将方法转换为函数.
| 归档时间: |
|
| 查看次数: |
241 次 |
| 最近记录: |