Substituir toString em um conjunto Scala
Eu quero criar um conjunto de inteiros chamadoIntSet
. IntSet
é idêntico aSet[Int]
em todos os sentidos, exceto que o seutoString
função imprime os elementos como delimitados por vírgula (o mesmo que se você chamoumkString(",")
), e tem um construtor que leva umTraversable
de inteiros. Qual é a maneira mais simples de fazer isso?
> IntSet((1 to 3)).toString
1,2,3
Eu acho que haveria uma maneira de uma linha para fazer isso, mas eu tenho andado por aí com funções implícitas e estendendoHashSet
e eu não consigo descobrir.
O truque é usar um objeto proxy.Eastsun tem a resposta abaixo. Aqui está uma versão ligeiramente diferente que define um nomeIntSet
digite e torna imutável.
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(",")
}