Відповіді:
title
- локальна змінна. Вони існують лише в межах її сфери (поточний блок)
@title
є змінною екземпляра - і доступна для всіх методів у класі.
Більше ви можете прочитати тут: http://strugglewithruby.blogspot.dk/2010/03/variables.html
У Ruby on Rails - оголошення ваших змінних у контролері як змінні екземпляра ( @title
) робить їх доступними для вашого перегляду.
Використовуйте @title
у своїх контролерах, коли ви хочете, щоб ваша змінна була доступна у ваших представленнях.
Пояснення полягає в тому, що @title
це змінна інстанція і title
є локальною змінною, і рейли надають змінні екземпляри від контролерів доступними для представлення. Це відбувається тому, що код шаблону (erb, haml тощо) виконується в межах поточного екземпляра контролера.
Різниця полягає в області застосування змінної. @Version доступний для всіх методів екземпляра класу.
Коротка відповідь, якщо ви перебуваєте в контролері і вам потрібно зробити змінну доступною для перегляду, тоді використовуйте @variable
.
Щоб отримати набагато довший відповідь, спробуйте це: http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html
@variable
s називаються змінними екземпляра в рубіні. Це означає, що ви можете отримати доступ до цих змінних у будь-якому способі всередині класу. [На всіх методах у класі]
Змінні без @
символу називаються локальними змінними, а це означає, що ви можете отримати доступ до цих локальних змінних лише в межах ЦЕ ДЕКЛАРОВАНОГО МЕТОДУ. Обмежено місцевим масштабом.
Приклад змінних екземплярів:
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
доступні в іншому методі в класі. Але те ж саме не було б доступним для локальних змінних.
Підручник про те, що таке змінна область застосування? представляє деякі деталі досить добре, просто додайте тут пов'язані.
+------------------+----------------------+
| Name Begins With | Variable Scope |
+------------------+----------------------+
| $ | A global variable |
| @ | An instance variable |
| [a-z] or _ | A local variable |
| [A-Z] | A constant |
| @@ | A class variable |
+------------------+----------------------+
Локальна змінна доступна лише з блоку її ініціалізації. Також локальна змінна починається з малої літери (az) або підкреслення (_).
І змінна інстанція є екземпляром self
і починається з @
також змінної екземпляра належить самому об'єкту. Змінні інстанції - це ті, які ви виконуєте методами, тобто .send
тощо
приклад:
@user = User.all
@user
Є змінною екземпляра
І неініціалізовані змінні екземпляра мають значення Nil
@title
& title
?
@title
абоtitle
@ змінні - це екземплярні змінні, без - локальні змінні.
Детальніше читайте на http://ruby.about.com/od/variables/a/Instance-Variables.htm