dddddmapとか作るとよくね?
http://d.hatena.ne.jp/ku-ma-me/20090312 を見て思ったんだけど、
x.ddmap.f ==> x.dmap.f.dmap x.dddmap.f ==> x.dmap.f.ddmap x.ddddmap.f ==> x.dmap.f.dddmap
とか作れば
x.map{|y|y*3/5+2}
とかが
x.dddmap*3/5+2
ってできて便利じゃね。
適当にこぴってきて実装した(Ruby1.8だけど)
module Enumerable def dmap(n=1) DelegateMap.new(n, self) end 2.upto(10) {|n| eval "def #{'d'*n}map; dmap(#{n}); end" } end class DelegateMap def initialize(n, enum) @n = n @enum = enum end def method_missing(mhd, *args, &blk) r = @enum.map {|elem| elem.__send__(mhd, *args, &blk) } @n > 1 ? r.dmap(@n-1) : r end end
これを使うと
[[[[[1]]]]].dddddmap.ddddmap.dddmap.ddmap.dmap*5 => [[[[[5]]]]]
みたいに多重配列の中に簡単に入るようになる(ぉ
[[[[[1]]]]].ddddddmap.dddddmap.ddddmap.dddmap.ddmap*5+3 => [[[[[8]]]]]
こんなのも簡単にできるし、必要な文字数もO(2^n)からO(n^2)に大幅ダウンだ。