Я изо всех сил пытаюсь понять разницу между: символом и текстом: относительно размещения двоеточия. Я понимаю, что, когда мы используем: символ, мы ссылаемся на этот объект и все, что он содержит, где в качестве текста: используется для назначения значения для текста, как и для переменной. Правильно ли это или кто-то может уточнить использование. Спасибо.
В чем разница между размещением толстой кишки в: что-то и что-то еще:
Ответ 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