2013-07-28 1 views
1

Вот как я создавал хэш до сих пор (за Codecademy)«удобство» методы создания хэш

my_hash = { 
    "pay" => "low", 
    "vacation" => "yes", 
    "parking" => "no" 
} 

А вот новый метод, позволяющий rubymonk о создании хэш.

chuck_norris = Hash[:punch, 99, :kick, 98, :stops_bullets_with_hands, true] 

Являются ли двоеточия во второй технике частью синтаксиса или частями строки? И если они всего лишь части строк, почему не строки в кавычках?

+0

Это не имеет ничего особенно делать с хешами. – sawa

+0

это действительно дубликат. Не знали, что они были символами. Теперь идти читать этот пост. Thx – dwilbank

ответ

1

Являются ли двоеточия во второй технике частью синтаксиса или части строки?

The : не является частью Hash синтаксиса создания, Вы видите его там, как ваши вторые символы, например, использовать в качестве ключей. : punch,: kick,: stops_bullets_with_hands: Symbol объектов. Hash::[] - метод, используемый для создания объекта Hash.

Hash[:punch, 99, :kick, 98, :stops_bullets_with_hands, true] 
    |_________| |________| 
    (key,value) (key,value) 

Во втором примере ключи считаются символами. Но вы также можете использовать строку, fixnum и т. Д.

+0

ah - совершенно новый тип объекта, введенный в урок без предупреждения! Поэтому они НЕ являются частью синтаксиса для создания хэша. Я должен просто посмотреть на: punch,: kick и т. Д., Как если бы они были целыми числами или строками. Правильно? – dwilbank

+0

В принципе, да. – Taymon

+0

@ Таймон Как? 'Hash :: []' метод нуждается только в парах '(key, value)', не имеет значения, какие объекты должны быть комбинациями 'key, value'. –

0

Являются ли двоеточия во второй технике частью синтаксиса или частей строки? И если они всего лишь части строк, почему не строки в кавычках?

Глядя на Rubydoc мы можем видеть, что метод Hash::[] имеет три формы:

Hash[ key, value, ... ] → new_hash 
Hash[ [ [key, value], ... ] ] → new_hash 
Hash[ object ] → new_hash 

Ваш конкретный пример является экземпляром первого случая, когда список объектов, которые интерпретируются как пары кнопочного значения. Так вызова:

Hash[a, b, c, d, e, f] 

будет пара:

  • а => б
  • с => d
  • е => е

Я думаю, что вы смущены : синтаксис, для которого вы можете 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" 
Смежные вопросы