當我嘗試編譯下面的代碼爲什麼隱式轉換不適用於第二個參數?
case class A(x: Int = 0)
object Conversions {
case class Converter[T](c: T) {
def +[U](that: Converter[U]): String = "worked"
}
implicit def convert(c: A): Converter[A] = Converter[A](c)
implicit def convert(c: Int): Converter[Int] = Converter[Int](c)
}
object Main extends App {
import Conversions._
val a: String = A() + A()
val b: String = 1 + A() // FAIL
val c: String = A() + 1
val d: Int = 1 + 1
}
我收到以下錯誤消息
error: type mismatch; found: A; required: String
是什麼Int
和A
之間的差異,使表達b
失敗,而a
和c
通?我該如何編譯它?
但'A()'不是Int! –
我沒有聲稱'A'是一個'Int' - 我只是表明如果''''像'Int',有一個二元運算符叫'+' - 他們會表現得很相似。 –
是的,但這第二次失敗可能有不同的機制。我已經創建了一個代碼版本,其中沒有第二個重載「Int。+(Int)」,但它仍然沒有編譯。要麼我犯了一個錯誤,要麼你的解釋是錯誤的。 –