Являются ли двоеточия во второй технике частью синтаксиса или частей строки? И если они всего лишь части строк, почему не строки в кавычках?
Глядя на Rubydoc мы можем видеть, что метод Hash::[]
имеет три формы:
Hash[ key, value, ... ] → new_hash
Hash[ [ [key, value], ... ] ] → new_hash
Hash[ object ] → new_hash
Ваш конкретный пример является экземпляром первого случая, когда список объектов, которые интерпретируются как пары кнопочного значения. Так вызова:
Hash[a, b, c, d, e, f]
будет пара:
Я думаю, что вы смущены :
синтаксис, для которого вы можете easily take a look at некоторые темы здесь, на SO. Просто подведем итог: :
в этом случае создает объект Symbol
.
В заключение:
Hash[:punch, 99, :kick, 98, :stops_bullets_with_hands, true]
может быть представлена в виде следующей хэш:
{
:punch => 99,
:kick => 98,
:stops_bullets_with_hands => true
}
где :punch
, :kick
и :stops_bullets_with_hands
являются символами и 99
, 98
и true
соответствующие значения.
Для возврата значения вы можете просто использовать метод Hash#[]
так:
chuck_norris[:punch] # 99
chuck_norris[:kick] # 98
chuck_norris[:stops_bullets_with_hands] # true
Помните, что вы можете преобразовать символ в строку с помощью #to_s
метода:
:punch.to_s # "punch"
:kick.to_s # "kick"
:stops_bullets_with_hands.to_s # "stops_bullets_with_hands"
Это не имеет ничего особенно делать с хешами. – sawa
это действительно дубликат. Не знали, что они были символами. Теперь идти читать этот пост. Thx – dwilbank