我想创建一组名为IntSet
. 除了它的函数将元素打印为逗号分隔(与您调用 相同)之外,它在所有方面都IntSet
相同,并且它有一个接受整数的构造函数。最简单的方法是什么?Set[Int]
toString
mkString(",")
Traversable
> IntSet((1 to 3)).toString
1,2,3
我认为会有一些单线方法可以做到这一点,但我一直在摆弄隐式函数和扩展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(",")
}