gpt4 book ai didi

Scala 隐式转换问题

转载 作者:行者123 更新时间:2023-12-04 14:49:28 24 4
gpt4 key购买 nike

我在以下代码中遇到隐式转换问题:

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"
}

Test 中的最后一条语句导致编译错误:
error: value << is not a member of A
a << "Test"

但是,如果我删除 import Y._从测试中,它编译得很好。

请注意,在实际代码中,X.B 和 Y.B 都是 Java 库的 Scala DSL 的一部分,我希望能够在同一个编译单元中使用它们。

最佳答案

看起来正在发生的事情是 Y.toB覆盖 X.toB当您在同一范围内导入两者时。如果我把 import Y._在那之前import X._ ,那么它就起作用了。另外,如果我重命名 Y对其他东西是隐含的(例如 toYB ),那么无论您按什么顺序放置它都可以工作。

关于Scala 隐式转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9160375/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com