2

という整数のセットを作成したいと思いますIntSetIntSetSet[Int]toString関数が要素をコンマ区切りで出力すること ( を呼び出した場合と同じmkString(",")) と、Traversable整数の これを行う最も簡単な方法は何ですか?

> IntSet((1 to 3)).toString
1,2,3

これを行うには1行の方法があると思いますが、暗黙の関数と拡張をいじっていて、それをHashSet理解できません。


秘訣は、プロキシ オブジェクトを使用することです。Eastsunは以下の答えを持っています. IntSet名前付きの型を定義し、それを不変にする、わずかに異なるバージョンを次に示します。

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

1 に答える 1

8
scala> import scala.collection.mutable
import scala.collection.mutable

scala> def IntSet(c: Traversable[Int]): mutable.Set[Int] = new mutable.SetProxy[Int] {
     |   override val self: mutable.Set[Int] = mutable.HashSet(c.toSeq :_*)
     |   override def toString = mkString(",")
     | }
IntSet: (c: Traversable[Int])scala.collection.mutable.Set[Int]

scala> IntSet(1 to 3)
res0: scala.collection.mutable.Set[Int] = 1,2,3
于 2013-03-09T05:35:02.580 に答える