В чем разница между @title
и title
? Поскольку оба они могут быть именами переменных. Кроме того, как мне решить, какую переменную я должен использовать? С @
или нет?
@variables в Ruby on Rails
Ответ 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
Ответ 6
@переменными являются переменные экземпляра, без локальных переменных.
Подробнее на http://ruby.about.com/od/variables/a/Instance-Variables.htm