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
对于您和该函数的用户来说更容易推理。相关: