2013-03-16 6 views
2

Я только начал изучать рубин на рельсах, и мне интересно, когда я должен использовать «=>», и когда я должен использовать «=» для назначения. Я вижу, что вы используете «=>» для хеша, для назначения значений символам в миграциях, но я не уверен, где рисовать линию.=> operator vs = operator

Спасибо!

+3

Символы не могут быть назначены так же, как номера не могут быть назначены. Могут быть назначены только переменные. –

+0

спасибо за это, отметьте это как ответ – jamesdlivesinatree

+0

Использование Ruby '=>' как оператора присваивания для хэшей происходит из Perl, который использует тот же оператор, однако '=>' не означает «присваивать». Вместо этого подумайте, что это означает «связанный с». В Perl '=>' действительно является псевдонимом для ',', который заканчивает определение массива пары ключей и значений. Итак, в Ruby не думайте об этом как о назначении и не думайте об этом как о ассоциации. Это прекрасно подходит, когда вы знаете, что на других языках они называют хеши «ассоциированными массивами». –

ответ

7

Символ => используется исключительно для хешей. Ruby имеет функцию, в которой хэши могут передаваться как последний аргумент вызова метода без включения окружающих фигурных скобок. Это обеспечивает что-то похожее на аргументы ключевых слов (хотя до Ruby 2.0 Ruby не имел аргументов ключевого слова).

Итак, когда вы видите это:

t.integer :foo, :default => 5 

Что это на самом деле означает это:

t.integer(:foo, { :default => 5 }) 

В остальном это просто синтаксический сахар разработан, чтобы сделать его лучше.

С другой стороны, символ = является оператором присваивания, который вы знаете и любите практически на любом языке программирования.

0

Я боролся с этим на некоторое время, но теперь предпочитают использовать новый стиль для хэшей, где это возможно

t.integer :foo, default: 5 
t.string :bar, default: 'Dave' 
0

=> не то же самое, как уступки, но я могу понять, почему это сбивает с толку. В хэше вы создаете ключ и значение в виде пары. Ключ и значение может быть что-нибудь

{'key1' => 'some value', :symbol_key => 'other value'} 

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

myhash = {'key1' => 'some value', :symbol_key => 'other value'} 

И только теперь вы можете получить вещи из вашего хэша

puts myhash['key1'] 

Так => оператор фактически используется для построения хэшей (или Dict ионные объекты), назначение позволяет сохранять значения в программе.

Что обычно происходит Rails (и, следовательно, в миграции), заключается в том, что хеш создается и передается вызову метода без его реализации. Но сантехника все тот же, это все еще только хэш, который создается.

В Ruby 1.9 теперь вы можете определить хеши, используя синтаксис, похожий на javascript, чтобы вы могли увидеть это.

myhash = {key1: 'some value', key2: 'other value'}