Iterable和IterableLike有什么区别?
还有每种用途的适当用途或预期用途是什么?
即,以下方法在参数中接受的集合的种类上会有什么不同?
def f[A](c: Iterable[A]) = c.foreach(print)
f: [A](c: Iterable[A])Unit
def g[A,B](c: IterableLike[A,B]) = c.foreach(print)
g: [A, B](c: scala.collection.IterableLike[A,B])Unit
最佳答案
Iterable
仅构成几个特征,包括IterableLike
。我认为这主要是实现细节;一些方法放在IterableLike
上,更多的是库的组织问题,而不是反映任何真正的区别。我不知道任何实现IterableLike
而不实现Iterable
的类(相反,这是不可能的,因为Iterable
扩展了IterableLike
);我很想听到任何消息。据我所知,您的方法将具有相同的行为。
我建议始终使用Iterable
(除非您正在研究scala标准库的内部实现)。