什么Scala功能允许在Any上使用plus运算符?

Bry*_*ung 14 scala

我还在学习Scala,当我在Koans中遇到一个例子时,我无法理解它为什么会起作用:

var foo : Any = "foo"
println(foo + "bar")
Run Code Online (Sandbox Code Playgroud)

任何没有+方法

Dyl*_*lan 22

对象中存在隐式转换scala.Predef:

implicit def any2stringadd(x: Any): StringAdd
Run Code Online (Sandbox Code Playgroud)

StringAdd定义了一个+运算符/方法:

def +(other: String) = String.valueOf(self) + other
Run Code Online (Sandbox Code Playgroud)

此外,由于scala.Predef始终在范围内,因此隐式转换将始终有效.

  • `StringAdd`位于`scala.runtime`([Github上的源代码](https://github.com/scala/scala/blob/master/src/library/scala/runtime/StringAdd.scala)).我不确定为什么它没有出现在[ScalaDoc]中(http://www.scala-lang.org/api/current/index.html#scala.runtime.package). (4认同)