首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Scala隐式转换问题

Scala隐式转换问题
EN

Stack Overflow用户
提问于 2012-02-06 20:50:49
回答 1查看 301关注 0票数 6

我在下面的代码中遇到了隐式转换的问题:

代码语言:javascript
运行
复制
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中的最后一条语句导致编译错误:

代码语言:javascript
运行
复制
error: value << is not a member of A
a << "Test"

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

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

EN

Stack Overflow用户

回答已采纳

发布于 2012-02-06 21:25:39

看起来发生的事情是,当你在同一范围内导入两者时,Y.toB会覆盖X.toB。如果我将import Y._放在import X._之前,那么它就可以工作。此外,如果我将Y的隐含名称重命名为其他名称(例如toYB),则无论您将其放入哪个顺序,它都可以正常工作。

票数 7
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9160375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档