我正在尝试在Scala中扩展一组整数。基于earlier answer我决定使用SetProxy对象。我现在正在尝试实现{em> Programming in Scala 第二版第25章所述的newBuilder
机制,但遇到了麻烦。具体来说,我无法弄清楚要为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中的编程之外,我查看了各种StackOverflow帖子,如this one,但仍然感到神秘。
答案 0 :(得分: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
作为构造函数arg。希望这会有所帮助。