6
我在与下面的代码隐式转换问题
trait A {
def send(s: String): String = {
println(s)
s
}
}
object X {
implicit def toB(a: A): B = new B(a)
class B(a: A) {
def <<(s: String): String = a send s
}
}
object Y {
implicit def toB(a: A): B = new B(a)
class B(a: A) {
}
}
object Test extends App {
import X._
import Y._
val a: A = new A {}
a << "Test"
}
在测试导致的最后一条语句编译错误:
error: value << is not a member of A
a << "Test"
但是,如果我从删除import Y._
测试,它编译好。
请注意,在真实的代码中,X.B和Y.B都是Scala DSL的Java库的一部分,我希望能够在同一个编译单元中使用它们。
这就是您所期望的。这就像Java中的静态导入。如果将隐式方法作为'toB(a)'调用,那么编译器如果知道后者没有覆盖另一个,那么它将如何知道您的意思? OP应该给你隐含的defs名称,像'AtoXB'和'AtoYB'就像你说的,因为'X.B'和'Y.B'是不同的类。 – 2012-02-06 13:36:20
确实,我不知道隐式方法名称会导致问题。我已经重新命名,现在工作正常,谢谢! – elk 2012-02-06 13:44:18