Bye Bye Moore

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

each_with_objectで素敵なmap生活を!

ちょっと感動したので、メモ。
rubyのmapメソッドを使う際、先に読み込み元にオブジェクトを持たせる事で
格好良さ気なコードを書くことができます。
mapで読み込む際、持たせるオブジェクトの振る舞いを決めてやれば足し引き掛け算と自由自在です。
(もちろん、対象オブジェクトがそのメソッドを持っている事が前提です)
行数節約にも良いですね。

p [1,2,3].each_with_object(40).map(&:-)
[-39, -38, -37]
=> [-39, -38, -37]

p [1,2,3].each_with_object(40).map(&:*)
[40, 80, 120]
=> [40, 80, 120]

p [1,2,3].each_with_object(40).map(&:+)
[41, 42, 43]
=> [41, 42, 43]

p ("a".."z").each_with_object(".png").map(&:+)
["a.png", "b.png", "c.png", "d.png", "e.png", "f.png", "g.png", "h.png", "i.png"
, "j.png", "k.png", "l.png", "m.png", "n.png", "o.png", "p.png", "q.png", "r.png
", "s.png", "t.png", "u.png", "v.png", "w.png", "x.png", "y.png", "z.png"]
=> ["a.png", "b.png", "c.png", "d.png", "e.png", "f.png", "g.png", "h.png", "i.p
ng", "j.png", "k.png", "l.png", "m.png", "n.png", "o.png", "p.png", "q.png", "r.
png", "s.png", "t.png", "u.png", "v.png", "w.png", "x.png", "y.png", "z.png"]