mapにも引数あっても良いんじゃないだろうか
String#eachのように引数をとれるeachのときにわざわざenum_for使うのもめんどくさいので、mapが引数取れてもいいんじゃないかと思えるのは自分だけだろうか。*1
module Enumerable def map(*args, &block) arr = [] each(*args) do |i| arr.push(block.call(i)) end arr end end
こうするとこんなことが出来るようになって便利そう。
"abcde\n\nabcde\n".map(""){|i| "<p>#{i.chomp.chomp}</p>\n" } #=> ["<p>abcde</p>\n", "<p>abcde</p>\n"]
とはいってもこれ以外の例はあまり思いつかないのだけど。なんか良さそうな例があればTBください。
そうなってくると、find、find_all、reject、inject、grepなども引数を考慮するべきとなってしまってめんどくさいのかなぁ。
eachの引数は一番最後で仮引数で受けてそれを委譲するという形で大丈夫そうな気もするけど。
どちらかというとどんなときにeachは引数を取れるようにすると良いだろうかという議論もありそうな気がした。
主要なやつがeachの引数を取れるようになったらeach_*といった感じのメソッドを書くよりもeach(:line)とかeach(:with_index)とかいった感じでeachの挙動を変えられた方がEnumrator使うより綺麗に書けそうな気もする。*2