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

时间:2011-09-19 01:51:26

标签: scala

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

var foo : Any = "foo"
println(foo + "bar")

任何没有+方法

2 个答案:

答案 0 :(得分:22)

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

implicit def any2stringadd(x: Any): StringAdd

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

def +(other: String) = String.valueOf(self) + other

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

答案 1 :(得分:1)

它的工作原理是隐式转换“修复”已为其提供转换的某些类型错误。以下是有关隐式转换机制的更多信息:

http://www.artima.com/pins1ed/implicit-conversions-and-parameters.html#21.2

事实上,它使用这个相同的示例x + y来解释它是如何工作的。这是本书的第1版,但解释仍然有效。