Jestem obecnie nauki Scala i chciał powtórzyć ten Haskell algebraicznych Typ danych:Czy można użyć `obiektu sprawy` z parametrem typu?
data Tree = Empty
| Leaf Int
| Node Tree Tree
To właśnie wpadł w Scala:
sealed trait Tree[T]
case class Empty[T]() extends Tree[T]
case class Leaf[T](value: T) extends Tree[T]
case class Node[T](left: Tree[T], right: Tree[T]) extends Tree[T]
jednak ktoś powiedział mi, że powinien używać case object
dla Empty
, co moim zdaniem jest prawdziwe, ponieważ nie pobiera parametrów - ale potem znowu wymaga parametru typu.
Próbowałem następujących ale żaden z nich nie kompilacji:
case object Empty[T] extends Tree[T]
case object Empty extends Tree[T]
case object Empty extends Tree
Więc zastanawiam się, czy istnieje sposób, aby wykorzystać case object
w tym przypadku, czy nie.
Singleton nie może mieć parametru typu. Może chcesz 'obiekt sprawy Pusty rozszerza Drzewo [Nothing]' –
'case object Pusty rozszerza Drzewo [Nothing]', ponieważ 'Nothing' jest podtypem każdego innego typu. –
Dziękuję za wyjaśnienia! –