Seq,SeqLike,GenSeq或GenSeqLike?

时间:2015-03-28 14:33:02

标签: scala types interface idiomatic

创建函数时,我应该将其作为参数SeqSeqLikeGenSeqGenSeqLike吗? (这么多选择!)

我唯一的要求是我可以map覆盖它并生成一个与之前相同数量和顺序的集合。

通常I"编程接口"并选择最一般的类型。在这种情况下,那将是GenSeqLike

这是正确/惯用的吗?

1 个答案:

答案 0 :(得分:3)

SeqLike只是Seq的一个实现层,允许您指定返回类型。 SeqLikeSeq的内容非常少,而且可以说是错误。所以你可以放心,不用担心-Like。 (如果您想构建所提供类型的新集合并保持类型直接,请改用CanBuildFrom。)

那么问题是是否使用GenSeqSeqGenSeq的问题在于处理可能是并​​行完成的,这意味着您必须避免使用可能违反预期的任何操作(例如,使用foreach求和)。此外,普遍的共识似乎是集合层次结构的GenX部分使集合过于复杂,并且使得并行集合的替代选择变得更加困难。所以我的建议是Seq,除非你非常确定你有自己想要并行处理的用例。如果您根本不在乎,Seq对您和该功能的用户来说更容易推理。