[ruby-list:50246] Re: Hash.new([])の挙動について

From: Nobuyoshi Nakada <nobu@...>
Date: 2015-10-27 07:30:33 UTC
List: ruby-list #50246
On 2015/10/27 13:17, Kamiya Kenichi wrote:
> 恐らく、意図されているものに近いコードは、
> 
>     a = Hash.new { |hash, key| hash[key] = [] }
> 
> なんじゃないかなぁと思います。

これはよく使われるパターンなのですが、参照しただけでkeyが追加されるという点に注意が必要です。

以下のように追加と代入を同時に行うという方法もありますが

    a = Hash.new {[]}
    a['key'] <<= 1
    a['key'] <<= 2
    a['key'] <<= 3

どちらにしても、二つ目以降でもaがfeezeされている場合には例外になるというのは防げないわけで、
すべてを満たすような書き方はなかなかないようです。

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread