Nadpisanie toString w zestawie Scala
Chcę utworzyć zestaw liczb całkowitych o nazwieIntSet
. IntSet
jest identyczny zSet[Int]
pod każdym względem oprócz tegotoString
Funkcja wypisuje elementy jako rozdzielane przecinkami (tak samo, jak gdybyś dzwoniłmkString(",")
) i ma konstruktora, który bierzeTraversable
liczb całkowitych. Jaki jest najprostszy sposób, aby to zrobić?
> IntSet((1 to 3)).toString
1,2,3
Sądzę, że będzie jakiś sposób, aby to zrobić, ale bawiłem się niejawnymi funkcjami i rozszerzaniemHashSet
i nie mogę tego zrozumieć.
Sztuczka polega na użyciu obiektu proxy.Eastsun ma odpowiedź poniżej. Oto nieco inna wersja, która definiuje nazwęIntSet
typ i czyni go niezmiennym.
import collection.immutable.{HashSet, SetProxy}
class IntSet(values: Traversable[Int]) extends SetProxy[Int] {
override val self: Set[Int] = HashSet(values.toSeq:_*)
override def toString() = mkString(",")
}