Почему все базовые неизменяемые коллекции являются окончательными или запечатаны в scala? - PullRequest
9 голосов
/ 21 января 2012

Я написал черту для сортировки итераций в Scala, и создание класса, с которым я мог бы смешать его, заняло почти столько же времени, сколько и для написания черты.Почему было принято дизайнерское решение, запрещающее пользователям писать такие вещи, как:

new List[Int] with SuperAwesomeTrait[Int]?

Теперь, если я хочу сделать это, мне нужно сделать какой-то странный взлом, например,

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

итогда

new StupidList[Int] with SuperAwesomeTrait[Int].

1 Ответ

9 голосов
/ 21 января 2012

Потому что, если я напишу

someList match {
  case Cons(head, tail) => whatever
  case Nil => somethingElse
}

, я не хочу, чтобы моя логика нарушалась новым, неожиданным подклассом.

Я подозреваю, что вы пытаетесь решить проблему с помощью подкласса, которыйбыло бы лучше решить с последствиями.

...