2
書「編程在斯卡拉」規定:斯卡拉:當多個隱式轉換申請
向上穿過斯卡拉2.7,這是故事的結尾。無論何時應用多個隱式轉換,編譯器都拒絕在它們之間選擇 。 Scala 2.8放鬆了這個規則。如果其中一個可用轉換嚴格爲 比其他轉換更具體,那麼編譯器將選擇更具體的 之一。 ...如果滿足以下條件之一,則隱式轉換比另一個更具體:
•前者的參數類型是後者的子類型。
考慮以下情況:
object Encoder {
implicit def fromInt(x: => Int) = { println("int"); new Encoder }
implicit def fromIntArray(x: => Array[Int]) = { println("int array"); new Encoder }
implicit def fromGenericArray[T](x: => Array[T])(implicit subencoder: (=> T) => Encoder) = {
println("generic array")
subencoder(x(0))
new Encoder
}
}
val e: Encoder = Array(1)
的多次轉化可以在這裏申請,但似乎fromIntArray被拾起。如果來自IntArray不存在,則從GenericArray中選擇。我的問題是,在上述規則適用的這種特定情況下,我能否安全地期望來自數組的IntArray將適用於所有其他數組[T]的Array [Int]和來自GenericArray?
我會說是的,但讀Scala語言規範,它會以很大的篇幅來解釋隱含的衝突解決:-) – Felix 2013-03-25 08:24:01
看起來我不得不這樣做。感謝您的建議:) – 2013-03-26 09:47:11