ビデオ・オモシロス

http://macromates.com/screencast/ruby_quiz_screencast.mov
このビデオ*1にて,enumeratorという素敵なものの存在を知った.

% irb
>> require 'enumerator'
>> p (1..10).enum_for(:each_slice, 3).to_a
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]
>> p (1..10).enum_for(:each_slice, 5).to_a
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
>> p (1..10).enum_for(:each_slice, 2).map{|l, r| l + r}
[3, 7, 11, 15, 19]
>> p (1..10).enum_for(:each_cons, 5).map{|e| e.inject{|r, e| r += e}}
[15, 20, 25, 30, 35, 40]

なんかもう素敵くないですか,この挙動.正直言って,知ってるもん勝ちだなぁと思った.


あと,こんな記法もアリなんだなぁとか感心してた.

>> a = if true
1>   'hoge'
1>   else
>>     'fuga'
1>   end
>> puts a
hoge

人のコードを読むのは面白いね.

*1:TDDでPascalの三角形を解こうっていう内容