为什么所有基础不可变集合最终或密封在scala中?

nny*_*thm 9 scala language-design

我在Scala中编写了一个用于对iterables进行排序的特性,并且创建一个可以将其混合的类花了几乎同样的时间来编写特征.为什么设计决定禁止用户编写如下内容:

new List[Int] with SuperAwesomeTrait[Int]?
Run Code Online (Sandbox Code Playgroud)

现在如果我想这样做,我需要做一些奇怪的黑客,比如

class StupidList extends LinearSeq {
  val inner = List()
  /* reimplement list methods by calling into inner */
} 
Run Code Online (Sandbox Code Playgroud)

然后

new StupidList[Int] with SuperAwesomeTrait[Int].
Run Code Online (Sandbox Code Playgroud)

Jam*_*Iry 9

因为如果我写

someList match {
  case Cons(head, tail) => whatever
  case Nil => somethingElse
}
Run Code Online (Sandbox Code Playgroud)

我不希望我的逻辑被一个新的,意想不到的子类打破.

我怀疑你正在尝试使用子类化来解决问题,这可以用implicits更好地解决.

  • @LuigiPlinge,这对于任何闭合代数都是一个问题(例如Option). (3认同)
  • @Joshua,我不知道你在谈论什么.我正在使用模式匹配来解构某些东西.我没有创造任何东西. (2认同)