Scala中的案例类是使用模式匹配增强的标准类,等于......(或者我错了?).此外,他们的实例不需要"新"关键字.在我看来,它们比常规类更容易定义(或者我又错了吗?).
有很多网页告诉他们应该在哪里使用(主要是关于模式匹配).但他们应该避免在哪里?为什么我们不到处使用它们?
Dan*_*ral 20
案例类不足的地方有很多:
有时这些要求在设计中会出现,并且需要将一个案例类转换为普通类.由于案例类的好处确实不是那么好 - 除了它们是为特别制作的少数特殊案例 - 我自己的建议是不要做任何案例类,除非明确使用它.
或者,换句话说,不要过度设计.
Rex*_*err 16
从case类继承是有问题的.假设你有这样的代码:
case class Person(name: String) { }
case class Homeowner(address: String,override val name: String)
extends Person(name) { }
scala> Person("John") == Homeowner("1 Main St","John")
res0: Boolean = true
scala> Homeowner("1 Main St","John") == Person("John")
res1: Boolean = false
Run Code Online (Sandbox Code Playgroud)
也许这就是你想要的,但通常你想要== b当且仅当b == a.不幸的是,编译器无法自动为您明智地解决这个问题.
这变得更糟,因为hashCode Person("John")与hashCode不同Homeowner("1 Main St","John"),所以现在等于行为怪异而 hashCode行为怪异.
只要您知道会发生什么,继承案例类就可以给出可理解的结果,但它已被视为不良形式(因此在2.8中已被弃用).
| 归档时间: |
|
| 查看次数: |
1049 次 |
| 最近记录: |