@ переменные в 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


@variables называются переменными экземпляра в 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