Подтвердить что ты не робот

Ruby Hash.new vs Хэш буквальный

Я вызываю сторонний API (написанный на PHP), проходящий в некоторых парах ключ/значение.

Этот код работает:

h = Hash.new
h['first_name'] = "Firstname"
h['last_name'] = "Lastname"
APICall([h]) # Record gets created

Это не означает:

h = {'first_name' => "Firstname", 'last_name' => "Lastname"}
APICall([h]) # Record does not get created

Когда я выгружаю Hash на консоль в обоих экземплярах, я получаю одну и ту же структуру данных. Так почему же первый способ работает, а второй - нет?

EDIT: Не уверен, что это имеет значение, но я использую Ruby 1.8.7p72/Linux. Также одной из пары ключ/значение является строка изображения с кодировкой Base64.

4b9b3361

Ответ 1

поскольку документация класса Hash гласит:

[](*args) public

Создает новый хэш, заполненный данными объектами. Эквивалентно буквальному {key => value,...}. В первой форме ключи и значения встречаются парами, поэтому должно быть четное число аргументов. Вторая и третья формы принимают один аргумент, который представляет собой либо массив пар ключ-значение, либо объект, конвертируемый в хэш.

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[] должен иметь такое же поведение, как {...}