我還在學習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問題... –