Как мне указать 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 в качестве конструктора Надеюсь это поможет.

Другие вопросы по тегам