scala - 有人可以扩展以下速记并解释它是如何工作的
问题描述
我正在查看此示例代码,在将其输入 scala repl 后,我可以看到它是如何工作的。
val twice: Int => Int =
x => x * 2
这是类似的:
val parse: String => Option[Int] =
s => if(s.matches("-?[0-9]+")) Some(s.toInt) else None
有人可以解构上述方法并解释它是如何工作的吗?
我可以看到名称两次或解析,然后是 Int => Int 或 String => Option[Int] 的类型。
现在在这两个函数的第二行你有一个变量 x 或 s。我只能假设这是参数。
此外,如果您可以扩展哪些 scala 功能允许这样编写函数。
谢谢!
解决方案
期望的值类型
x => x * 2
是
Int => Int
哪个去糖
Function1[Int, Int]
因此函数定义
val twice: Int => Int = x => x * 2
相当于
val twice: Function1[Int, Int] = new Function1[Int, Int] {
override def apply(x: Int) = x * 2
}
根据SLS 6.3 匿名函数。