SCALA暗黙の変換に関する質問以外の農業性ルール
-
09-10-2019 - |
質問
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)が可能です。があります 非曖昧性ルール - 暗黙的な変換は、挿入する他の可能な変換がない場合にのみ挿入されます。この規則によれば、このコードはまったくコンパイルされるべきではありません。ただし、コードは正常にコンパイルおよび実行されます。何がわかりませんか?
ありがとう。
解決
この理由は、SCALA言語仕様セクション6.26.2に記載されています。
メソッドを関数として扱う前に、ETA拡張を実行することにより、1つに変換する必要があります。したがって、もう1つの暗黙の変換を適用する必要があり、したがって val
選択されています。
アップデート: :欠陥のある例を削除しました。
パラメーターのないメソッドの評価は、常に暗黙的に実行されます。
所属していません StackOverflow