La modifica a Either
è stata apportata il 24 aprile 2008 in commit c0b21797bde81861305dd68853add2d8bd46e484 "Changed isLeft e isRight per utilizzare meno memoria. ":
Changed isLeft and isRight to use less memory.
Changed either from a sealed trait to a sealed abstract class to allow
exhaustiveness checking.
All changes per the discussion in #797.
Il rapporto bug di riferimento è SI-797 "lazy vals in entrambi i casi dovrebbe probabilmente essere def" :
Questo commento di David R. MacIver è molto illuminante :
While I'm making suggestions, wouldn't it be better if Either were a sealed abstract class so you could get pattern match warnings?
Nota che nel frattempo fa Scala supporta i controlli esaustivi per sealed trait
s e sealed abstract class
es, quindi non sarebbe più necessario, tuttavia, c'è anche questo < a href="https://issues.scala-lang.org/browse/SI-797?focusedCommentId=41402#comment-41402"> commento di Geoffrey Alan Washburn :
Given that Left and Right are final, I cannot see any sensible way someone could be using Either as a mixin.
Quindi, ha ancora senso che Either
non sia un trait
.
Come per Option
, era sealed
in impegnare 0bef86d8e8b7ea7ebb790ebcec7fedcb9a24f5a8 il 9 marzo , 2006, tuttavia, era un abstract class
anche prima di allora.
La modifica da trait
a abstract class
è stata effettuata in commit d7007f7a9607481eb73b8df587e3c52cf4272147 "Usa" classe mixin " invece di "tratto" " il 3 marzo 2006.
Per quanto riguarda il motivo per cui non sono interfacce, la risposta è piuttosto semplice: Scala non ha interfacce, almeno non nel senso di Java o C #.