Scala子案例类param名称与父案例类param名称冲突

non*_*com 1 parameters scala case-class

我们假设我们有以下两个类:

abstract case class MyParent(param: Int) {
   // ...
}

case class MyChild(param: Int) extends MyParent(param: Int) {
   // ...          ^^^^^                        ^^^^^
}
Run Code Online (Sandbox Code Playgroud)

使它们成为案例类导致两个param使用位置都出错,这表示它需要override修改器来覆盖父类的值.这对我来说很奇怪..为什么我必须在这里发明其他的param名称..为什么这个事情的顺序是强制执行的?利润在哪里?

Hei*_*ger 7

你永远不应该从另一个案例类派生一个案例类!

在使用scala -deprecation开始的REPL中尝试这个:

scala> case class Foo(foo: String)
defined class Foo

scala> case class Bar(override val foo: String) extends Foo(foo)
<console>:9: warning: case class `class Bar' has case ancestor `class Foo'.  Case-to-case inheritance has potentially dangerous bugs which are unlikely to be fixed.  You are strongly encouraged to instead use extractors to pattern match on non-leaf nodes.
Run Code Online (Sandbox Code Playgroud)