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