Я хотел предварительно заполнить Hash, учитывая массив ключей и значение по умолчанию (пустой массив). Я попытался сделать это, используя #product
метод Array
.
> hash = Hash[[:foo, :bar].product([[]])] # => {:foo=>[], :bar=>[]}
> hash[:foo].push(:baz) # => {:foo=>[:baz], :bar=>[:baz]}
Я не понимаю, почему значение применяется ко всем ключам в хэше. Если вместо этого я использую возвращаемое значение product
и заполняю хеш непосредственно из этого, я получаю ожидаемое поведение.
> [:foo, :bar].product([[]]) # => [[:foo, []], [:bar, []]]
> hash = Hash[[[:foo, []], [:bar, []]]] # => {:foo=>[], :bar=>[]}
> hash[:foo].push(:baz) # => {:foo=>[:baz], :bar=>[]}
Я использую ruby 2.3.6