为什么这段代码编译失败,但是当我取消注释指示的行时编译成功?(我每晚都使用 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)为什么显式调用会产生任何影响?