как указано в документации класса Hash
:
[](*args) public
Создает новый хэш, заполненный данными объектами. Эквивалентно буквальному значению {key =>,…}. В первой форме ключи и значения встречаются парами, поэтому должно быть четное число аргументов.Вторая и третья формы принимают один аргумент, который является либо массивом пар ключ-значение, либо объектом, конвертируемым в хеш.
Hash["a", 100, "b", 200] #=> {"a"=>100, "b"=>200}
Hash[ [ ["a", 100], ["b", 200] ] ] #=> {"a"=>100, "b"=>200}
Hash["a" => 100, "b" => 200] #=> {"a"=>100, "b"=>200}
http://apidock.com/ruby/Hash/%5B%5D/class
Так что, по крайней мере, Hash[]
должен иметь то же поведение, что и {...}