我已经研究了this question,但仍然不理解可迭代特征和可遍历特征之间的区别。有人能解释一下吗?
发布于 2011-09-15 15:12:51
把它看作是吹口水和吸口水的区别。
当你调用Traversable
的foreach
或它的派生方法时,它会一次一个地将它的值输入到你的函数中--这样它就可以控制迭代了。
但是,使用Iterable
返回的Iterator
,您可以从中提取值,并控制何时自己移动到下一个值。
发布于 2019-06-07 06:38:50
丹尼尔的回答听起来不错。让我看看我能不能用我自己的话说。
所以Iterable可以给你一个迭代器,让你一次遍历一个元素(使用next()),然后随意停下来。为此,迭代器需要保持一个指向元素位置的内部“指针”。但是Traversable为您提供了foreach方法,可以一次遍历所有元素而不会停止。
像Range(1,10)这样的东西只需要有两个整数作为遍历对象的状态。但是Range(1,10)作为Iterable提供了一个迭代器,它需要使用3个整数作为state,其中一个是索引。
考虑到Traversable还提供foldLeft,foldRight,它的foreach需要以已知和固定的顺序遍历元素。因此,可以为Traversable实现迭代器。例如,定义迭代器= toList.iterator
https://stackoverflow.com/questions/7425370
复制相似问题