Überschreiben Sie toString in einem Scala-Set
Ich möchte eine Reihe von Ganzzahlen mit dem Namen erstellenIntSet
. IntSet
ist identisch mitSet[Int]
in jeder Hinsicht, außer dass estoString
Die Funktion druckt die Elemente durch Kommas getrennt aus (genauso, als ob Sie sie aufgerufen hätten)mkString(",")
), und es hat einen Konstruktor, der eineTraversable
von ganzen Zahlen. Was ist der einfachste Weg, dies zu tun?
> IntSet((1 to 3)).toString
1,2,3
Ich würde denken, es gäbe eine einzeilige Möglichkeit, dies zu tun, aber ich habe mit impliziten Funktionen herumgespielt und erweitertHashSet
und ich kann es nicht herausfinden.
Der Trick besteht darin, ein Proxy-Objekt zu verwenden.Eastsun hat die Antwort unten. Hier ist eine etwas andere Version, die einen Namen definiertIntSet
Typ und macht es unveränderlich.
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(",")
}