このコードがコンパイルに失敗するのに、指定された行のコメントを外すと正常にコンパイルされるのはなぜですか? (私は毎晩 Scala 2.8 を使用しています)。明示的に呼び出すとstring2Wrapper
、その時点から暗黙的に使用できるようになります。
class A {
import Implicits.string2Wrapper
def foo() {
//string2Wrapper("A") ==> "B" // <-- uncomment
}
def bar() {
"A" ==> "B"
"B" ==> "C"
"C" ==> "D"
}
object Implicits {
implicit def string2Wrapper(s: String) = new Wrapper(s)
class Wrapper(s: String) {
def ==>(s2: String) {}
}
}
}
編集:Martin Oderskyのコメントへのポインタを含む、これまでの回答に感謝します。
「明示的な結果の型のない暗黙の変換は、独自の定義に続くテキストでのみ表示されます。そのようにして、循環参照エラーを回避します。」
1) 「循環参照エラー」の危険性とは何か、および 2) 明示的な呼び出しが違いを生むのはなぜですか?