Scala (1+;)如何成为函数?

Scala (1+;)如何成为函数?,scala,Scala,我是Scala新手,正在尝试理解以下代码(源自Scala书开头的一个示例) 我不理解点(b)的“1 +”如何被认为是函数(取1 int参数,返回一个int)满足点(a)?< /p>中的W42定义。 请您解释一下或给我指一些有答案的文件好吗?简单。在Scala中,1+2只是1.+(2)之上的一种语法糖。这意味着Int有一个名为+的方法,该方法接受Int: final class Int extends AnyVal { def +(x: Int): Int = //... //... }

我是Scala新手,正在尝试理解以下代码(源自Scala书开头的一个示例)

我不理解点(b)的“1 +”如何被认为是函数(取1 int参数,返回一个int)满足点(a)?< /p>中的W42定义。


请您解释一下或给我指一些有答案的文件好吗?

简单。在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

顺便说一句,从技术上讲,eta扩展还涉及到将方法转换为函数。

可能有一些有用的提示:
1+
意味着
1+\ucode>意味着
x=>1+x
感谢Tomasz提供的额外示例。感谢Antoras提供的有用提示
scala> def s42(f: String => String) = f("42")
s42: (f: String => String)String

scala> s42("abc".concat)
res0: String = abc42