爲什麼此代碼無法編譯,但是當我取消註釋指定的行時,編譯成功? (我每晚都使用Scala 2.8)。看起來,明確呼籲string2Wrapper
允許它從這一點隱含地使用。爲什麼這個明確的Scala調用方法可以隱式解決?
class A {
import Implicits.string2Wrapper
def foo() {
//string2Wrapper("A") ==> "B" // <-- uncomment
}
def bar() {
"A" ==> "B"
"B" ==> "C"
"C" ==> "D"
}
object Implicits {
implicit def string2Wrapper(s: String) = new Wrapper(s)
class Wrapper(s: String) {
def ==>(s2: String) {}
}
}
}
編輯:謝謝你的答案至今,其中包括一個指向馬丁·奧德斯基的評論,
「沒有明確的結果類型的隱式轉換隻能在後面的文本 可見其自己的定義。這樣,我們可以避免循環參考錯誤。「
我還是有興趣找出1)「循環引用錯誤」的危險是什麼?2)爲什麼明確的調用有什麼區別?
這是(應該是)spec'ed。 Paulp最近剛剛發掘了這張票。讓我看看我是否找不到它... – 2010-04-28 17:17:41
在這裏:https://lampsvn.epfl.ch/trac/scala/ticket/801 – 2010-04-28 17:22:30