@variables в Ruby on Rails

В чем разница между @title и title? Поскольку оба они могут быть именами переменных. Кроме того, как мне решить, какую переменную я должен использовать? С @ или нет?

Ответ 1

title - локальная переменная. Они существуют только в пределах своего объема (текущий блок)

@title - это переменная экземпляра и доступна для всех методов внутри класса.

Вы можете прочитать больше здесь: http://strugglingwithruby.blogspot.dk/2010/03/variables.html

В Ruby on Rails - объявление ваших переменных в контроллере в качестве переменных экземпляра (@title) делает их доступными для вашего представления.

Ответ 2

Разница заключается в объеме переменной. @version доступен для всех методов экземпляра класса.

Короткий ответ, если вы находитесь в контроллере, и вам нужно сделать переменную доступной для представления, используйте @variable.

Для более длительного ответа попробуйте следующее: http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html

Ответ 3

Используйте @title в своих контроллерах, когда вы хотите, чтобы ваша переменная была доступна в ваших представлениях.

Объяснение состоит в том, что @title - это переменная экземпляра, а title - локальная переменная, а рельсы делают переменные экземпляра из контроллеров доступными для представлений. Это происходит потому, что код шаблона (erb, haml и т.д.) Выполняется в рамках текущего экземпляра контроллера.

Ответ 4

@variable называются переменными экземпляра в 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 доступны другой метод внутри класса. Но то же самое было бы недоступно с локальными переменными.

Ответ 5

Локальная переменная доступна только внутри блока его инициализации. Также локальная переменная начинается с буквы нижнего регистра (a-z) или подчеркивания (_).

И переменная экземпляра является экземпляром self и начинается с @ Также переменная экземпляра принадлежит самому объекту. Переменные экземпляра - это те, которые вы выполняете с помощью методов, т.е. .send и т.д.

Пример:

@user = User.all

@user - это переменная экземпляра

И неинициализированные переменные экземпляра имеют значение Nil