我的API是否应该为集合公开List / Vector,但是如果我使用大多数集合类型中的泛型方法,我应该在内部使用Seq作为我的集合吗?
答案 0 :(得分:2)
如果我理解你的问题:你应该使用最简单的类型来完成你需要的一切 - 所以你的API和内部代码应尽可能使用Seq over List / Vector。这意味着如果您不必
,则不要对实现做出假设答案 1 :(得分:2)
我使用的是大多数集合类型中的通用方法
对于这些方法,我实际建议使用scala.collection.GenSeq
。
如果你想重复使用你的方法让我们说顺序处理你的序列怎么办?在这种情况下scala.collection.Seq
是不够的,因为scala.collection.parallel.ParSeq
无法传递给同一个方法。例如:
def sumAll(seq: Seq[Int]): Int = seq.sum
现在您想让客户端能够使用此方法进行并行计算,您可以引入新的" generic"方法喜欢:
def sumAllPar(seq: Seq[Int]): Int = seq.par.sum
或使您的方法真正通用设计:
def sumAll(seq: GenSeq[Int]): Int = seq.sum
在这种情况下,以下调用有效:
sumAll(Seq(1,2,3))
sumAll(Seq(1,2,3).par)
我的API是否应公开集合的List / Vector
同样的说法只考虑一件事:限制具有更具体类型的用法(即:Seq
- 您不希望并行调用方法,{{1} - 需要索引访问权限等等。)