@ переменные в Ruby on Rails
в чем разница между @title
и title
? Поскольку оба они могут быть именами переменных. Кроме того, как я могу решить, какую переменную я должен использовать? С @
или нет?
6 ответов
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. Это означает, что вы можете получить доступ к этим переменным в любом методе внутри класса. [По всем методам в классе]
переменные без @
символ называется локальными переменными, что означает, что вы можете получить доступ к этим локальным переменным только в этом объявленном методе. Ограничена локальным охватом.
пример переменных экземпляра:
class Customer
def initialize(id, name, addr)
@cust_id = id
@cust_name = name
@cust_addr = addr
end
def display_details
puts "Customer id #{@cust_id}"
puts "Customer name #{@cust_name}"
puts "Customer address #{@cust_addr}"
end
end
В приведенном выше примере @cust_id
, @cust_name
, @cust_addr
есть доступ в другом методе внутри класса. Но то же самое не будет доступно с локальными переменными.
локальная переменная доступна только внутри блока ее инициализации. Также локальная переменная начинается с буквы нижнего регистра (a-z) или подчеркивания (_).
и переменной экземпляра экземпляра self
и начинается с @
также переменная экземпляра принадлежит самому объекту. Переменные экземпляра-это те, которые вы выполняете методы на i. e..send
etc
пример:
@user = User.all
на @user
экземпляр переменная
и неинициализированные переменные экземпляра имеют значение Nil
@ переменные-это переменные экземпляра, без локальных переменных.
подробнее в http://ruby.about.com/od/variables/a/Instance-Variables.htm