Scalaの暗黙的な変換メカニズムを使用した次の状況を誰かに説明してもらえますか。コードがあります:
object Main {
implicit val x:Int => String = v => "val"
implicit def y(v:Int) = "def"
def p(s:String) = print(s)
def main(args: Array[String]): Unit = {
p(1)
}
}
このコードは「val」を出力します。しかし、2行目にコメントすると:
//implicit val x:Int => String = v => "val"
コードは「def」を出力します。
したがって、この状況では両方の暗黙的な変換 (x と y) が可能です。あいまいさのない規則があります。挿入できる変換が他にない場合にのみ、暗黙的な変換が挿入されます。この規則によれば、このコードはまったくコンパイルされるべきではありません。しかし、コードは正常にコンパイルおよび実行されます。何がわからないのですか?
ありがとう。