Как мне указать newBuilder для набора scala?
Я пытаюсь расширить набор целых чисел в Scala. Основываясь на предыдущем ответе, я решил использовать объект SetProxy. Я сейчас пытаюсь реализовать newBuilder
механизм, как описано в главе 25 второго издания по программированию в Scala, и у меня возникли проблемы. В частности, я не могу понять, какой параметр указать SetBuilder
объект. Вот что я попробовал.
package example
import scala.collection.immutable.{HashSet, SetProxy}
import scala.collection.mutable
case class CustomSet(override val self: Set[Int]) extends SetProxy[Int] {
override def newBuilder[Int, CustomSet] =
new mutable.SetBuilder[Int, CustomSet](CustomSet())
}
object CustomSet {
def apply(values: Int*): CustomSet = CustomSet(HashSet(values.toSeq: _*))
}
Это не компилируется. Здесь ошибка.
scala: type mismatch;
found : example.CustomSet
required: CustomSet
override def newBuilder[Int, CustomSet] = new mutable.SetBuilder[Int, CustomSet](CustomSet())
^
Это мистифицирует меня. Я пробовал различные варианты проблемного значения, но ни один из них не работает. Как мне сделать эту компиляцию?
В дополнение к программированию в Scala я просмотрел различные посты Stackru, подобные этой, но остаюсь загадочным.
1 ответ
Дайте этому шанс:
case class CustomSet(override val self: Set[Int]) extends SetProxy[Int] {
override def newBuilder = new mutable.SetBuilder[Int, Set[Int]](CustomSet())
}
object CustomSet {
def apply(values: Int*): CustomSet = CustomSet(HashSet(values.toSeq: _*))
}
При создании SetBuilder
, указав CustomSet
так как параметр второго типа не удовлетворял ограничению типа для этого параметра. Переключение на Set[Int]
отвечает этим критериям и позволяет вам по-прежнему передавать в CustomSet
в качестве конструктора Надеюсь это поможет.