1. okitan

    Posted

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