我应该默认使用GenSeq吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我应该默认使用GenSeq吗?相关的知识,希望对你有一定的参考价值。

将GenSeq用作“默认”集合类型是最佳做法吗?它似乎是最通用的集合界面。但是我没有看到它在代码示例中广泛使用(更具体的Seq用于代替)。

答案

不应。应该出现在API中的最通用的集合类型是:

  • Seq - 顺序收集
  • Set - 数学集(没有重复值)
  • Map - 关联/关联集(概念上与离散的PartialFunctions相同)

唯一对上述区别中性的抽象是TraversableIterable。 (例如,Map[K, V]既是Iterable[(K, V)]又是Traversable[(K, V)]

如果对于实际参数而言重要的是它的元素可能以某种(未指定的)顺序进行检查,那么Traversable会捕获该特征。

包含“Like”或“Once”或“Gen”的类或特征名称是内部魔法的一部分,使得Scala集合展现出“最少惊喜的原则”(其中主要是在其上调用HOF的属性,例如mapfilter产生的结果与匹配的具体类型一样,就像调用HOF的集合一样。

另一答案

是。 Seq用于非并行(顺序)序列集合。

GenSeq是平行和正常序列的共同特征。

ParSeq是非顺序序列(Pun意图),它是使用并行性实现的。

GenSeq中缺少一些方法(Like contains),但根据我的经验,它们可以手工实现(您可以尝试查看Seq中的实现)。

资料来源:https://docs.scala-lang.org/overviews/parallel-collections/architecture.html

关于scala集合的另一个好页面(非平行的):https://docs.scala-lang.org/overviews/core/architecture-of-scala-collections.html

以上是关于我应该默认使用GenSeq吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 android studio 的片段上使用 Firebase 吗?

Android 我应该在异步任务中将片段作为弱引用传递吗?

我应该用片段替换 Android 活动吗?

Sphinx、reStructuredText 显示/隐藏代码片段

使用带有渲染功能的 Vue.js 3 片段

Android - 片段中的 getIntent()