SyncEnumerator
rucilaさんの日記を見て、enumeratorという単語で調べていたら、SyncEnumeratorというクラスを発見しました。何が'sync'なのだろうと思いましたが、require 'generator'を見つけて納得です。
require 'generator' enumerator = SyncEnumerator.new(["A", "B", "C"], [10, 20, 30]) enumerator.each do |a| p a end
実行結果です。
["A", 10] ["B", 20] ["C", 30]
つまりは、二つのEnumerableオブジェクトを同期させてeachで回せるということですね。
ん? ということは、こうすれば…
require 'generator' enumerator = SyncEnumerator.new(DATA, [10, 20, 30]) enumerator.each do |a| p a end __END__ Alice Bob Chris
実行結果です。
["Alice\n", 10] ["Bob\n", 20] ["Chris\n", 30]
すばらしい♪ インタフェース(含むMix-in)でプログラミングすることの強力さを感じます。
追記:かずひこさんから、Enumerable#zipを教えていただきました。ありがとうございます。そういえば、Haskellにもzipがあったような。ジッパーを閉じる感覚ですね。