同じvalueを持つkeyがたくさんあるようなHashを初期化したいときに、
keyのArrayに対してinjectを使うと、
ブロックの最後でhashを返すのを忘れてしまってエラーになることが多いw
value = "xxx"
hash_keys = %[ key1 key2 key3 ]
hash = hash_keys.inject({}) do |_hash, key|
_hash[key] = value
_hash # これを忘れがち
end
だけど、each_with_objectを使うと忘れても大丈夫
hash = hash_keys.each_with_object({}) do |key, _hash|
_hash[key] = value
end
ちなむと、破壊的メソッドで引数のオブジェクトを更新していくだけなので、
immutable なやつとかには使えないし、
文字列操作も普段使わないような破壊的なやつを使わないといけない。
ので、いまのところHashに同じ値を挿入するくらいしか使ったこと無い。
なお、以下のようなコードが一般的だろうがなんとなく好きではない。
hash = {}
hash_keys.each {|key| hash[key] = value }
※ ちなみにeach_with_objectのブロック引数の順番が覚えられないので備忘録ついでに書いたエントリです