是否有原因,对象TreeSet.apply
方法返回SortedSet
而不是TreeSet
?为什么scala的TreeSet返回SortedSet
下面的代码不会在阶2.7
val t:TreeSet[Int] = TreeSet(1,2,3)
是否有原因,对象TreeSet.apply
方法返回SortedSet
而不是TreeSet
?为什么scala的TreeSet返回SortedSet
下面的代码不会在阶2.7
val t:TreeSet[Int] = TreeSet(1,2,3)
编译字面答案是因为apply()
处于++
,这是在SortedSet
定义的术语implemented,因此返回SortedSet
。 ++
然后继续使用+
,其中是定义在TreeSet
,所以如果它很关键(尽管我不会推荐它,因为它依赖于实现并可能随时间而改变!),所以您可以将其重新转换回TreeSet
。
你从TreeSet中需要什么,你不能从SortedSet中获得?
我不确定设计决策背后的基本原理是什么,尽管看起来它已经在2.8版本中改变了。
这已被确定为当前scala集合库的一个简短的未来,并且在作为scala 2.8一部分的更新集合库中进行了解决。血腥的细节见http://www.scala-lang.org/sid/3#。
我我不想要'TreeSet',我不会要求'TreeSet'对吗?应该'List(1,2,3)'返回'Iterable'?我使用'SortedSet'的主要问题是我无法从中删除一个元素,并保持它的类型为'SortedSet'。你实际上在这里说的是“是的,先生,这是一个包”;-)。 – 2010-03-25 11:11:26
是的,这当然是一个有效的用例,我没有注意到很多这些方法在'SortedSet'上没有被覆盖。可能值得在邮件列表中询问API设计。同时,您可以下载结果或使用'TreeSet.empty'和'+'构建设置(如您可能已经知道的那样)。 – 2010-03-26 03:46:30