Ruby1.8.7の新機能@いくつか実装してみた
今まで,Schemeで
(take (circular-list 1 2 3) 10)
とか書いてたことが,Rubyで
[1,2,3].cycle.take(10)
と書けるようになった.これは嬉しい.
Object#tapも早速乱用.
module Enumerable def group_by Hash.new {[]}.tap {|ht| each {|i| ht[yield(i)] <<= i } } end end
今までEnumerable#takeが欲しいなぁと思ったことはあまりないけど,EnumerableやEnumeratorが強力になったお陰で,これからのRubyでは需要が高まりそうだ.
Schemeで当たり前のようにtakeとか書いてたことが,Rubyでもきっとやりやすくなるんだろうなぁ.
あとListとcar,cdrがあればいいのに(笑).
(追記)
Enumerableだからeach使わなきゃ…と思ってたら,group_byをinject使って一行で実装してるのを見つけてしまった.そうだよね.別に直接each使わなくてもいいんだ.