创建函数时,我应该将其作为参数Seq
,SeqLike
,GenSeq
或GenSeqLike
吗? (这么多选择!)
我唯一的要求是我可以map
覆盖它并生成一个与之前相同数量和顺序的集合。
通常I"编程接口"并选择最一般的类型。在这种情况下,那将是GenSeqLike
。
这是正确/惯用的吗?
答案 0 :(得分:3)
SeqLike
只是Seq
的一个实现层,允许您指定返回类型。 SeqLike
但Seq
的内容非常少,而且可以说是错误。所以你可以放心,不用担心-Like
。 (如果您想构建所提供类型的新集合并保持类型直接,请改用CanBuildFrom
。)
那么问题是是否使用GenSeq
或Seq
。 GenSeq
的问题在于处理可能是并行完成的,这意味着您必须避免使用可能违反预期的任何操作(例如,使用foreach
求和)。此外,普遍的共识似乎是集合层次结构的GenX
部分使集合过于复杂,并且使得并行集合的替代选择变得更加困难。所以我的建议是Seq
,除非你非常确定你有自己想要并行处理的用例。如果您根本不在乎,Seq
对您和该功能的用户来说更容易推理。