gpt4 book ai didi

Scala 不可变 SortedSet 在删除时不是 "stable"

转载 作者:行者123 更新时间:2023-12-01 07:33:17 31 4
gpt4 key购买 nike

我必须处理 scala 2.7.5 中的一个不可变对象(immutable对象),它的成员之一是 immutable Sortedset。 .我对加法、合成没问题,它给出:

class MyClass[A](s:SortedSet[A]) {
...
def + (elem:A):MyClass[A] {
new MyClass(s + elem)
}
}

它起作用了,因为 + 运算符在 trait sortedSet 中重载以返回一个 SortedSet。

不幸的是删除元素失败,因为 - 方法没有重载:

class MyClass[A](s:SortedSet[A]) {
...
def - (elem:A):MyClass[A] {
new MyClass(s - elem) // Compiler error: (s - elem) is a Set[A]
}
}

有谁知道当我抑制一个元素时如何获得一个排序集知道:- 我不想使用像 TreeSet 这样更具体的集合。- 我不能使用不太具体的特征作为 Set[A] 而不是我的 SortedSet。

最佳答案

如果你能等到 2.8,看起来这会正常工作。

来自 SortedSetLike.scala (不可变 SortedSet 特征的超特征)

trait SortedSetLike[A, +This <: SortedSet[A] with SortedSetLike[A, This]] extends Sorted[A, This] with SetLike[A, This]

这使得 This 类型成为 SortedSet。然后在SetLike.scala , - 操作符的签名是

def - (elem: A): This

因此在 SortedSet 上使用时将正确返回 SortedSet

关于Scala 不可变 SortedSet 在删除时不是 "stable",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1271426/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com