Какая разница между @title
а title
? Поскольку оба они могут быть именами переменных. Кроме того, как мне решить, какую переменную мне следует использовать? С @
или нет?
ruby-on-rails
ruby
variables
OneZero
источник
источник
Ответы:
title
является локальной переменной. Они существуют только в пределах своей области (текущий блок)@title
является переменной экземпляра и доступна всем методам в классе.Вы можете прочитать больше здесь: http://strugglingwithruby.blogspot.dk/2010/03/variables.html
В Ruby on Rails - объявление ваших переменных в контроллере как переменных экземпляра (
@title
) делает их доступными для вашего просмотра.источник
Используйте
@title
в своих контроллерах, когда вы хотите, чтобы ваша переменная была доступна в ваших представлениях.Объяснение заключается в том, что
@title
это переменная экземпляра иtitle
локальная переменная, а rails делает переменные экземпляра из контроллеров доступными для представлений. Это происходит потому, что код шаблона (erb, haml и т. Д.) Выполняется в рамках текущего экземпляра контроллера.источник
Разница заключается в области действия переменной. @Version доступна для всех методов экземпляра класса.
Краткий ответ: если вы находитесь в контроллере и вам нужно сделать переменную доступной для представления, используйте
@variable
.Для более длинного ответа попробуйте это: http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html
источник
@variable
s называются переменными экземпляра в ruby. Это означает, что вы можете получить доступ к этим переменным в любом методе внутри класса. [По всем методам в классе]Переменные без
@
символа называются локальными переменными, что означает, что вы можете получить доступ к этим локальным переменным только в рамках ЗАЯВЛЕННОГО МЕТОДА. Ограничено местным охватом.Пример переменных экземпляра:
В приведенном выше примере
@cust_id
,@cust_name
,@cust_addr
доступны в другом методе в классе. Но то же самое не будет доступно с локальными переменными.источник
Учебник о том, что такое переменная область? Представляет некоторые детали довольно хорошо, просто приложите сюда соответствующие.
источник
Локальная переменная доступна только из блока ее инициализации. Также локальная переменная начинается со строчной буквы (az) или подчеркивания (_).
И переменная экземпляра является экземпляром
self
и начинается с.@
Также переменная экземпляра принадлежит самому объекту. Переменные экземпляра являются те , которые вы выполняете методы т.е..send
т.д.пример:
@user
Является переменной экземпляраИ неинициализированные переменные экземпляра имеют значение
Nil
источник
@title
&title
?@title
илиtitle
@ переменные являются переменными экземпляра, без локальных переменных.
Узнайте больше на http://ruby.about.com/od/variables/a/Instance-Variables.htm
источник