如何指定一个阶集newBuilder?(How do I specify a newBuilder

2019-08-31 08:08发布

我想延长一组斯卡拉整数。 基于一个较早的答案我已经决定使用SetProxy对象。 我现在想实现newBuilder在Scala编程第二版的第25章所描述的机制和时遇到麻烦。 具体来说,我想不出来指定到什么参数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())
                                                                                        ^

这是神秘的给我。 我试着对有问题的值的各种变化,但他们没有工作。 如何使这个编译?

除了编程在斯卡拉我已经通过各种StackOverflow的岗位看上去像这一个 ,但仍迷惑不解。

Answer 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为第二类型PARAM不满足约束为该PARAM类型。 切换它来Set[Int]符合这一标准,并允许您仍然可以通过在你的CustomSet作为构造ARG。 希望这可以帮助。



文章来源: How do I specify a newBuilder for a scala set?