Ü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(",")
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage