【问题标题】:How do I implement a collection in Scala 2.8?如何在 Scala 2.8 中实现集合?
【发布时间】:2011-02-01 20:32:42
【问题描述】:

在尝试编写 API 时,我在 Scala 2.8(.0-beta1) 中的集合方面遇到了困难。

基本上我需要写一些东西:

  • 为特定类型的不可变集合添加功能
  • 其中所有方法(如 filter 和 map)都返回相同类型的集合,而无需覆盖所有内容(这就是我首先选择 2.8 的原因)
  • 您通过这些方法获得的所有集合都使用与原始集合相同的参数构造(类似于 SortedSet 如何通过隐式处理排序)
  • 它本身仍然是一个特征,独立于任何集合实现。

另外,我想定义一个默认实现,例如基于 HashSet。特征的伴生对象可能会使用此默认实现。我还不确定是否需要构建器工厂的全部功能将我的集合类型映射到其他集合类型。

我阅读了paper on the redesign of the collections API,但从那时起情况似乎发生了一些变化,我遗漏了其中的一些细节。我还研究了集合源代码,但我不确定它是否非常一致。

理想情况下,我希望看到的要么是一个动手教程,它一步一步地告诉我我需要的部分,要么是对所有细节的广泛描述,以便我自己判断我需要哪些部分。我喜欢“Scala 编程”中关于对象相等的章节。 :-)
但我很感激任何可以帮助我更好地理解新系列设计的文档或示例。

【问题讨论】:

标签: scala scala-collections scala-2.8


【解决方案1】:

我会看看collection.immutable.BitSet 的实现。它有点分散,重用了 collection.BitSetLike 和 collection.generic.BitSetFactory 中的东西。但它完全符合您的要求:实现添加新功能的特定元素类型的不可变集。

【讨论】:

  • 感谢您的指点,Martin,我将研究 BitSet。它似乎比 SortedSet 更清晰。我真正想写的是建立在集合之上但独立于集合的任何实现的东西。然后我想要另一个通过将它与集合实现结合起来实际实现我的特征的类。我想这里的选择是混合或转发。
猜你喜欢
  • 2011-04-12
  • 2010-12-15
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
相关资源
最近更新 更多