>>930
921のリンク先の言葉を使えば、デフォルトのままでforeachが「内部イテレータ」の役割を果たす。
Iteratorはその挙動を自分で指定できる、メタプログラミングの一種かと(既存のarrayを操作できるわけではないけど)。