Mixin SynchronizedSet与具有隐式Ordering对象的SortedSet

时间:2013-04-12 03:21:36

标签: scala collections implicit

我似乎无法创建一个也在SynchronizedSet中混合的SortedSet。问题的关键是SortedSet需要一个隐式的Ordering对象。

val orderByIdThenName = Ordering[(Int, String)].on[Foo](foo => foo.id -> foo.name)
new mutable.TreeSet[Foo]()(orderByIdThenName) // <- Works fine and is Ordered
new mutable.HashSet[Foo] with mutable.SynchronizedSet[Foo] // <- Mixin works
new mutable.TreeSet[Foo]()(orderByCount) with mutable.SynchronizedSet[Foo] // Fail!

最后一行给出错误“无法创建对象,因为scala.collection.SortedSetLike中的成员排序[A]未定义。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

这似乎是IntelliJ中的一个错误。我能够重现该问题并在编辑器中看到错误,但编译时没有错误或警告。

因为没有给出orderByCount的定义,我假设它是这样的:

val orderByCount = Ordering[Int].on[Foo](_.count)
new mutable.TreeSet[Foo]()(orderByCount) with mutable.SynchronizedSet[Foo]

<强>更新: 想出了一种通过覆盖ordering来消除IntelliJ中的错误的方法:

new mutable.TreeSet[Foo]()(orderByCount) with mutable.SynchronizedSet[Foo] {
    implicit override val ordering: Ordering[Foo] = orderByCount
}