【发布时间】:2011-02-13 10:37:31
【问题描述】:
为什么这段代码编译失败,但是当我取消注释指示的行时编译成功? (我每晚都使用 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)为什么显式调用会产生任何影响?
【问题讨论】: