我还在学习Scala,当我在Koans中遇到一个例子时,我无法理解为什么它会起作用:
var foo : Any = "foo"
println(foo + "bar")
任何没有+方法
答案 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版,但解释仍然有效。