読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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

ruby bash

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