Scala,Java和平等
val filesHere = (new java.io.File(".")).listFiles val filesHere2 = (new java.io.File(".")).listFiles
这非常直观.我宁愿期望filesHere和filesHere2相等. 这当然是由于Java和Scala之间的语义不匹配,例如,关于数组或(文件)相等.显然,我在这里遗漏了一些东西! 解决方法
您可能想通读这里:
http://ofps.oreilly.com/titles/9780596155957/AdvancedObjectOrientedProgramming.html#EqualityOfObjects 但似乎你做了: 这里的javadoc在这里: 更新: 来自第一个链接的几个片段可能会有所帮助: 在Java,C和C#中,==运算符测试以供参考,而不是值相等.相比之下,Ruby的==运算符测试值相等.无论您习惯使用哪种语言,请务必记住在Scala中,==正在测试价值平等. 参考==在列表中未按预期工作: 虽然这看似不一致,但鼓励对两个可变数据结构的相等性进行明确测试是语言设计者的保守方法.从长远来看,它可以帮助您避免条件下的意外结果. 更新2: 根据Raphael的评论,我查看了规范,两天前的最新更新已经过时了,我在http://www.scala-lang.org/files/archive/nightly/pdfs/ScalaReference.pdf看到了这些: Method equals: (Any)Boolean is structural equality,where two instances are equal if they both belong to the case class in question and they have equal (with respect to equals) constructor arguments. class AnyRef extends Any { def equals(that: Any): Boolean = this eq that final def eq(that: AnyRef): Boolean = . . . // reference equality 因此,似乎Scala 2.10.2中的定义没有改变,因为规范似乎是一致的.如果行为不同,那么如果您编写单元测试,则应将其作为Scala的错误发送. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- angular – 我可以将对象发送到被动形式吗?
- typescript – 使用observable跟踪typeahead列表中的当前位
- bash – 什么是[-n“$VARIABLE”] ||退出0意味着
- scala – 是否可以从self type调用重写方法?
- Xfire生成WebService客户端时 jaxb-xjc 报错 Error generat
- 什么-b在bash中意味着什么
- 阉割bootstrap-2.3.2,只需要bootstrap的icon和button样式
- git revert和git reset的区别详解
- Scala:为什么修复类型成员会创建Java子类?
- AngularJs表单验证实例1