Scala 2.9中的案例类和代理行为
发布时间:2020-12-16 08:54:28 所属栏目:安全 来源:网络整理
导读:在将我们的代码迁移到 Scala 2.9时,我们发现大量的代码无法正常工作并且无声地失败.我们将其跟踪到扩展代理不相等的案例类.在我们的代码中,我们不直接扩展Proxy,我们只是在扩展Proxy的库中扩展类. 任何帮助将不胜感激. 在2.8 scala case class Test(a:String
在将我们的代码迁移到
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 在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中的一个错误.否则,如果你有一个扩展任何其他类的case类,你必须调查该基类的层次结构,以确保它不会扩展Proxy.我们无法在代码中执行此操作,我们只能修复更明显的错误.如果这是预期的行为,那么编译器警告是必须的.那个听起来是对的吗? 更新 也正在讨论scala mailing list. 更新 我已经提交了bug 解决方法
在2.9中他们改变了equals方法:
override def equals(that: Any): Boolean = if(that == null) false else that equals self 至 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) } x:由于某种原因,等于不等于自我. 您可以覆盖equals方法来修复它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |