破いて捨てたノート

Webやテクノロジーやそれ以外に関する思いつき

Rubyの`Enumerable#each_with_object`を使ってみた

attr_accessorで生やしたattributes達とそのvaluesをハッシュとして欲しいことがあり、最初はこんな感じに書いた。

hoge_attributes = {}
%I(user_name first_name last_name email).each do |attr|
  hoge_attributes[attr] = @hoge.send(attr)
end

次の日に、電車の中で『パーフェクトRuby』を読んでいたら、もっと短くかけそうな書き方が書いてあった。

Enumerable#each_with_object

そいつを使えばこんな感じに書き換えららそう。

hoge_attributes = %I(user_name first_name last_name email).each_with_object({}) do |attr|
  hoge_attributes[attr] = @hoge.send(attr)
end

実際バイト数は増えたが、行数は減った。 勉強になった。

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)