Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

AWKっぽい操作をRubyの構文でやるCLIツール「gr8」 その2:mapメソッド

gr8でのmapは1行分をselfとみなし、順繰りにぶん回すメソッドです。
gr8は内部的にRubyを使っているので……ブロックを渡す事も、&:でlambdaを渡す事ができます。

$ cat data | grep -v "^$" | gr8 -C 1 'map(&:downcase)'
haruhi
mikuru
yuki

実装はオリジナルのEnumrable#mapをベースとしつつ、instance_execを使用しています。

alias __map map
def map(&block)
  __map {|x| x.instance_exec(x, &block) }
end

オリジナルと同じ挙動にしたい場合、collectを使ってください。
ためしにselfを使うと、Enumerator::Lazyを返してきます。

$ cat data | grep -v "^$" | gr8 -C 1 'collect{self}'
#<Enumerator::Lazy:0x007fd0498c19c0>
#<Enumerator::Lazy:0x007fd0498c19c0>
#<Enumerator::Lazy:0x007fd0498c19c0>

参考もと

Gr8 by kwatch