J'ai regardé cette question , mais ne comprends toujours pas la différence entre Itérable et Traversable traits. Quelqu'un peut m'expliquer ?
Réponses
Trop de publicités?Il pense que la différence entre le soufflage et la succion.
Lorsque vous avez un appel en un Traversable
s foreach
, ou de ses dérivés méthodes, il va souffler ses valeurs dans votre fonction d'un seul à la fois - de sorte qu'il a le contrôle sur l'itération.
Avec l' Iterator
renvoyée par un Iterable
si, vous sucer les valeurs en dehors de ça, le contrôle de quand passer à la suivante en vous-même.
Pour le dire simplement, les itérateurs pour conserver l'état, traversables ne le font pas.
Un Traversable
a une méthode abstraite: foreach
. Lorsque vous appelez foreach
, la collection va nourrir le passé de la fonction de tous les éléments qu'il garde, l'un après l'autre.
D'autre part, une Iterable
a comme méthode abstraite iterator
, qui retourne un Iterator
. Vous pouvez appeler next
sur Iterator
pour obtenir l'élément suivant au moment de votre choix. Jusqu'à ce que vous faites, c'est de garder une trace de l'endroit où il a été dans la collection, et quelle est la prochaine.