Scala Seq,SeqLike,GenSeq还是GenSeqLike?

Scala Seq,SeqLike,GenSeq还是GenSeqLike?,scala,types,interface,idioms,Scala,Types,Interface,Idioms,创建函数时,我应该将其作为参数Seq,SeqLike,GenSeq,还是GenSeqLike?(这么多选择!) 我唯一的要求是,我可以映射到它上面,并生成一个具有与以前相同数量和顺序的参数的集合 通常我会选择“编程到接口”,并选择最通用的类型。在这种情况下,这将是一个GenSeqLike 这是正确的/惯用的吗?SeqLike只是允许您指定返回类型的Seq的一个实现层。几乎没有什么东西是SeqLike,但不是Seq,这些可以说是一个错误。因此,您可以放心地不必担心像这样的问题。(如果要构建给定类型

创建函数时,我应该将其作为参数
Seq
SeqLike
GenSeq
,还是
GenSeqLike
?(这么多选择!)

我唯一的要求是,我可以
映射到它上面,并生成一个具有与以前相同数量和顺序的参数的集合

通常我会选择“编程到接口”,并选择最通用的类型。在这种情况下,这将是一个
GenSeqLike


这是正确的/惯用的吗?

SeqLike
只是允许您指定返回类型的
Seq的一个实现层。几乎没有什么东西是
SeqLike
,但不是
Seq
,这些可以说是一个错误。因此,您可以放心地不必担心像
这样的问题。(如果要构建给定类型的新集合并保持类型的直线性,请改用
CanBuildFrom
。)

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

相关: