elk*_*elk 6 scala implicit-conversion
我在以下代码中遇到隐式转换问题:
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"
}
Run Code Online (Sandbox Code Playgroud)
Test中的最后一个语句导致编译错误:
error: value << is not a member of A
a << "Test"
Run Code Online (Sandbox Code Playgroud)
但是,如果我import Y._
从Test中删除,它编译得很好.
请注意,在实际代码中,XB和YB都是Java库的Scala DSL的一部分,我希望能够在同一个编译单元中使用它们.
当您在同一范围内导入时,看起来正在发生的事情是Y.toB
重写X.toB
.如果我把import Y._
以前那么import X._
,那么它的工作原理.此外,如果我将Y
隐含的名称重命名为其他内容(例如toYB
),那么无论您将其置于何种顺序,它都会起作用.