OK.
Разница между операторами =
и =>
заключается в том, что первый - это присвоение, второй - ассоциация в хэше (ассоциативный массив). Таким образом, { :key => 'val' }
говорит «создайте ассоциативный массив, ключом будет :key
, а значением будет 'val'
». Если вы хотите звучать как Rubyist, мы называем это «hashrocket». (Хотите верьте, хотите нет, но это не самый странный оператор в Ruby; у нас также есть <=>
, или «оператор космического корабля».)
Вы можете быть сбиты с толку, поскольку в методах можно использовать ярлык, если последний параметр является хэшем, вы можете опустить волнистые скобки ({}
). поэтому вызов render :partial => 'foo'
в основном вызывает метод рендеринга, передавая хеш с одной парой ключ / значение. Из-за этого вы часто видите хеш как последний параметр, который имеет необязательные параметры для бедняков (вы также видите нечто подобное в JavaScript).
В Ruby любое нормальное слово является локальной переменной. Таким образом, foo
внутри метода - это переменная, ограниченная уровнем метода. Префикс переменной @
означает область применения переменной для экземпляра. Так что @foo
в методе - это уровень экземпляра.
@@
означает переменную класса, то есть переменные @@
находятся в области видимости класса и всех его экземпляров.
:
означает символ. Символ в Ruby - это особый вид строки, который подразумевает, что он будет использоваться в качестве ключа. Если вы пришли из C # / Java, они похожи по использованию на ключевую часть перечисления. Есть и другие отличия, но в основном каждый раз, когда вы рассматриваете строку как ключ любого типа, вместо этого вы используете символ.