Bye Bye Moore

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

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"]