Dlaczego Scala Niektórzy nie dziedziczą z AnyVal, aby użyć funkcji typu wartości i zapisać koszty boksu?Opcja Scala? Dlaczego niektórzy nie dziedziczą AnyVal i dlaczego nie jest to typ wartości?
Coś jak:
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")
}
ma sens, z wyjątkiem typów wartości, które działają poprawnie z ogólnymi parametrami, które mogą być klasą wartości. Przykład TestSome w OP, który rozszerza AnyVal, całkowicie kompiluje i działa z określoną przez użytkownika klasą wartości. – user2684301
Być może to ograniczenie zostało zniesione. Ponadto 'Some' dziedziczy wiele cech kolekcji i mogą tam występować naruszenia innych ograniczeń typu Value Type. –
Niektóre dziedziczą tylko opcję. Opcja dziedziczy dwie cechy - Product i Serializable - które dziedziczą Any. – user2684301