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

В чем разница между размещением толстой кишки в: что-то и что-то еще:

Я изо всех сил пытаюсь понять разницу между: символом и текстом: относительно размещения двоеточия. Я понимаю, что, когда мы используем: символ, мы ссылаемся на этот объект и все, что он содержит, где в качестве текста: используется для назначения значения для текста, как и для переменной. Правильно ли это или кто-то может уточнить использование. Спасибо.

4b9b3361

Ответ 1

:whatever является символом, у вас есть эта часть права.

Когда вы используете хэш, так вы использовали его в 1.8x ruby:

{:key => value, :another_key => another_value}

Это называется синтаксисом hashrocket. В ruby ​​1.9x это изменилось на:

{key: value, another_key: another_value}

Существует обратная совместимость, которая будет по-прежнему загружать синтаксис hashrocket... Но в 1.9 "ключ:" является символом

Ответ 2

{:key => value} - это старый хэш-синтаксис в ruby, теперь у нас есть новый синтаксис хэша, который больше похож на json, поэтому

{:key => value}

совпадает с

{key: value}

Старый, все были знакомы с:

old_hash = {:simon => "Talek", :lorem => "Ipsum"}

Это все хорошо и денди, но это может быть проще и чище. Проверьте стиль Ruby 1.9, он похож на JSON:

new_hash = {simon: "Talek", lorem: "Ipsum"}

Но теперь вы смотрите ближе и спрашиваете: "Но раньше ключ был символом явно, что с этим сейчас?".

Ну, верно, новая нотация - это своего рода синтаксический сахар для наиболее распространенного стиля хэшей, так называемый символ хеша объекта. Если вы сделаете это в irb, вы увидите, что ruby ​​возвращает старый хэш, используя символы, используемые в качестве ключей:

> new_hash = {simon: "Talek", lorem: "Ipsum"}
=> {:simon=>"Talek", :lorem=>"Ipsum"} 

Если вам нужны произвольные объекты в качестве ваших хэш-ключей, вам все равно придется делать это в старой школе.

ref: http://breakthebit.org/post/8453341914/ruby-1-9-and-the-new-hash-syntax