我还在学习Scala,当我穿过的Koans一个例子跑了,我无法理解为什么它的工作原理:什么Scala功能允许加号运算符在Any上使用?
var foo : Any = "foo"
println(foo + "bar")
任何不具有+方法
我还在学习Scala,当我穿过的Koans一个例子跑了,我无法理解为什么它的工作原理:什么Scala功能允许加号运算符在Any上使用?
var foo : Any = "foo"
println(foo + "bar")
任何不具有+方法
有一个在scala.Predef
对象的隐式转换:
implicit def any2stringadd(x: Any): StringAdd
StringAdd限定+
操作者/方法:
def +(other: String) = String.valueOf(self) + other
此外,由于scala.Predef始终处于范围内,因此该隐式转换将始终有效。
由于隐式转换而起作用,其中“修复”了已提供转换的某些类型错误。这里是隐式转换机制的详细信息:
http://www.artima.com/pins1ed/implicit-conversions-and-parameters.html#21.2
事实上它使用这同一个例子x + y
解释它是如何工作的。这是本书的第一版,但解释仍然有效。
'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)中。 –
感谢您的链接 - 我已将它添加到我的回答中 – Dylan
@Kipton Interresting“not in scaladoc”,有没有其他特征/对象不在scaladoc中? (一个人假设在scaladoc中找到每个scala特质/对象)对我来说似乎值得一个新的SO问题... –