2

我正在尝试在 Scala 中扩展一组整数。根据较早的答案,我决定使用 SetProxy 对象。我现在正在尝试实现《Scala 编程newBuilder》第二版第 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())
                                                                                        ^

这对我来说很神秘。我已经尝试了有问题的值的各种变化,但它们都不起作用。我该如何编译?

除了在 Scala 中编程之外,我还浏览了类似这样的各种 StackOverflow 帖子,但仍然一头雾水。

4

1 回答 1

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 传入。希望这可以帮助。

于 2013-04-26T11:32:41.817 回答