在将我们的代码迁移到 Scala 2.9 时,我们发现大量代码不起作用并且默默地失败了。我们将其追踪到扩展 Proxy 不相等的案例类。在我们的代码中,我们不直接扩展 Proxy,我们只是在扩展 Proxy 的库中扩展类。
任何帮助将不胜感激。
在 2.8
scala> case class Test(a:String) extends Proxy {
| def self = a
| }
defined class Test
scala>
scala> val label = new Test("bla")
label: Test = bla
scala> println(label == label) // this is TRUE
true
scala> println(label == "bla")
true
在 2.9
scala> case class Test(a:String) extends Proxy {
| def self = a
| }
defined class Test
scala>
scala> val label = new Test("bla")
label: Test = bla
scala> println(label == label) // this is now FALSE
false
scala> println(label == "bla")
true
更新
我认为这只能是 Scala 2.9 中的一个错误。否则,如果您有一个扩展任何其他类的案例类,您必须调查该基类的层次结构,以确保它绝不会扩展代理。我们将无法在我们的代码中执行此操作,我们只能修复更明显的错误。如果这是预期行为,那么编译器警告是必须的。那个听起来是对的吗?
更新
也在scala 邮件列表中讨论。
更新
我提交了一个错误