これは Scala 2.10 を使用してコンパイルに失敗します
object TestImplicits {
class View
implicit class RichView[A <: View](v: A) {
def onClicked() = println(v + " was clicked")
}
implicit def intToView[A <: View](i: Int): A = ???
implicit def intToRichView(id: Int): RichView[View] = ???
1.onClicked()
}
エラーは次のとおりです。
<console>:20: error: type mismatch;
found : Int(1)
required: ?{def onClickedd: ?}
Note that implicit conversions are not applicable because they are ambiguous:
both method intToView in object TestImplicits of type [A <: TestImplicits.View]
(i: Int)A
and method intToRichView in object TestImplicits of type (id: Int)TestImplicits
.RichView[TestImplicits.View]
are possible conversion functions from Int(1) to ?{def onClickedd: ?}
1.onClickedd()
^
しかし待ってください、クラス View にはメソッドがありませんonClicked
! 私が問題を抱えている理由は次のとおりです。
- 2 番目の関数の実装に使用しているため、最初の暗黙的な関数を削除できません。
- 2 番目の陰関数を削除すると、電源機能が失われます。
どうすれば両方を維持できますか?
アップデート
に変更1.onClicked()
するとintToView(1).onClicked()
、次の興味深いエラーが表示されます。
<console>:20: error: value onClicked is not a member of Nothing
intToView(1).onClicked()
^
誰かが私にこれを説明してくれたらありがたいです。