Оператор двойных сплатов деструктивно модифицирует хеш - это ошибка Ruby?

Я заметил очень удивительное поведение с** (двойной сплат) оператор в Ruby 2.1.1.

Когда пары ключ-значение используются перед**hashхеш остается неизменным; однако, когда пары ключ-значение используются только после**hashхэш постоянно изменяется.

h = { b: 2 }

{ a: 1, **h }        # => { a: 1, b: 2 }
h                    # => { b: 2 }

{ a: 1, **h, c: 3 }  # => { a: 1, b: 2, c: 3 }
h                    # => { b: 2 }

{ **h, c: 3 }        # => { b: 2, c: 3 }
h                    # => { b: 2, c: 3 }

Для сравнения рассмотрим поведение* оператор по массивам:

a = [2]

[1, *a]     # => [1, 2]
a           # => [2]

[1, *a, 3]  # => [1, 2, 3]
a           # => [2]

[*a, 3]     # => [2, 3]
a           # => [2]

Массив остается неизменным повсюду.

Предполагаем ли мы иногда разрушительное поведение** является преднамеренным, или это больше похоже на ошибку?

В любом случае, где находится документация, описывающая, как** оператор предназначен для работы?

Я тоже задавал этот вопросв Рубиновом форуме.

ОБНОВИТЬ

Ошибка исправлена ​​в Ruby 2.1.3+.

Ответы на вопрос(2)

Ваш ответ на вопрос