2

これは 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()
                               ^

誰かが私にこれを説明してくれたらありがたいです。

4

2 に答える 2