Perché Scala Alcuni non eredita da AnyVal in modo che utilizzi la funzionalità del tipo di valore e salvi i costi di boxe?Opzione Scala? Perché Some non eredita AnyVal e perché non è un tipo di valore?
Qualcosa di simile:
sealed trait TestOption[+A] extends Any {
def isEmpty: Boolean
def get: A
}
final case class TestSome[+A](val x: A) extends AnyVal with TestOption[A] {
def isEmpty = false
def get = x
}
case object TestNone extends TestOption[Nothing] {
def isEmpty = true
def get = throw new NoSuchElementException("None.get")
}
che ha senso tranne che i tipi di valore funzionano bene con parametri generici che possono essere una classe di valore. L'esempio di TestSome nell'OP che estende AnyVal è totalmente compilato e funziona con una classe di valore definita dall'utente. – user2684301
Forse questa restrizione è stata revocata. Inoltre, 'Some' eredita una serie di tratti di raccolta e potrebbero esserci violazioni di altri vincoli di tipo Value in agguato lì. –
Alcuni ereditano solo l'opzione. L'opzione eredita due tratti - Prodotto e serializzabile - che ereditano entrambi. – user2684301