【发布时间】:2015-06-01 19:44:56
【问题描述】:
创建函数时,我应该将其作为参数Seq、SeqLike、GenSeq 还是GenSeqLike? (这么多选择!)
我唯一的要求是我可以map 处理它并生成一个与以前相同数量和顺序的参数的集合。
通常我“编程到接口”并尽可能选择最通用的类型。在这种情况下,那将是 GenSeqLike。
这是正确的/惯用的吗?
【问题讨论】:
标签: scala types interface idioms
创建函数时,我应该将其作为参数Seq、SeqLike、GenSeq 还是GenSeqLike? (这么多选择!)
我唯一的要求是我可以map 处理它并生成一个与以前相同数量和顺序的参数的集合。
通常我“编程到接口”并尽可能选择最通用的类型。在这种情况下,那将是 GenSeqLike。
这是正确的/惯用的吗?
【问题讨论】:
标签: scala types interface idioms
SeqLike 只是Seq 的一个实现层,它允许您指定返回类型。 SeqLike 但不是 Seq 的东西很少,而且可以说是错误。因此,您不必担心-Likes,您会感到很自在。 (如果您想构建给定类型的新集合并保持类型正确,请改用CanBuildFrom。)
那么问题是使用GenSeq 还是Seq。 GenSeq 的问题在于处理可能是并行完成的,这意味着您必须避免使用任何可能违反您期望的操作(例如,与 foreach 求和)。此外,普遍的共识似乎是集合层次结构的GenX 部分使集合过于复杂,并且使得合并并行集合的替代选择变得更加困难。所以我的建议是Seq,除非你很确定你有你想要并行处理的用例。如果您根本不在乎,Seq 更容易为您和该功能的用户推理。
【讨论】: