Dav*_*ave 8 scala case-class scala-2.8 scala-2.9
在将我们的代码迁移到Scala 2.9时,我们发现大量的代码无法正常工作并且无声地失败.我们将其跟踪到扩展代理不相等的案例类.在我们的代码中,我们不直接扩展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
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
更新
我认为这只能是Scala 2.9中的一个错误.否则,如果你有一个扩展任何其他类的case类,你必须调查该基类的层次结构,以确保它不会扩展Proxy.我们无法在代码中执行此操作,我们只能修复更明显的错误.如果这是预期的行为,那么编译器警告是必须的.那个听起来是对的吗?
更新
也在scala邮件列表上讨论.
更新
我提交了一个错误
在2.9中他们改变了equals方法:
override def equals(that: Any): Boolean =
if(that == null) false
else that equals self
Run Code Online (Sandbox Code Playgroud)
至
override def equals(that: Any): Boolean = that match {
case null => false
case x: Equals => (x canEqual self) && (x equals self)
case x => (x equals self)
}
Run Code Online (Sandbox Code Playgroud)
x:由于某种原因,等于不等于自我.
您可以覆盖equals方法来修复它.
归档时间: |
|
查看次数: |
513 次 |
最近记录: |