创建函数时,应将Seq
,SeqLike
,GenSeq
或GenSeqLike
用作参数吗? (这么多选择!)
我唯一的要求是我可以对其进行map
并产生一个具有与以前相同数量和顺序的参数的集合。
通常,我会“编程到接口(interface)”并选择最通用的类型。在这种情况下,这将是GenSeqLike
。
这是正确/惯用的吗?
最佳答案
SeqLike
只是Seq
的实现层,允许您指定返回类型。很少是SeqLike
而不是Seq
的东西,可以说是错误。因此,您不必担心-Like
便会感到舒服。 (如果您要构建给定类型的新集合并保持类型正确,请改用CanBuildFrom
。)
因此,问题是要使用GenSeq
还是Seq
。 GenSeq
的问题在于处理过程可能并行进行,这意味着您必须避免使用任何可能违反您期望的操作(例如,对foreach
求和)。此外,普遍的共识似乎是集合层次结构的GenX
部分使集合过于复杂,并使得合并并行集合的替代选择变得更加困难。因此,我的建议是Seq
,除非您非常确定要使用并行处理的用例。如果您根本不在乎,则Seq
更容易为您和函数用户推断。