Was ist der Unterschied zwischen @title
und title
? Da beide Variablennamen sein können. Wie entscheide ich, welche Art von Variable ich verwenden soll? Mit @
oder nicht?
Was ist der Unterschied zwischen @title
und title
? Da beide Variablennamen sein können. Wie entscheide ich, welche Art von Variable ich verwenden soll? Mit @
oder nicht?
Antworten:
title
ist eine lokale Variable. Sie existieren nur in ihrem Geltungsbereich (aktueller Block)
@title
ist eine Instanzvariable - und steht allen Methoden innerhalb der Klasse zur Verfügung.
Weitere Informationen finden Sie hier: http://strugglingwithruby.blogspot.dk/2010/03/variables.html
Wenn Sie in Ruby on Rails Ihre Variablen in Ihrem Controller als Instanzvariablen ( @title
) deklarieren , stehen sie Ihrer Ansicht zur Verfügung.
Verwenden @title
Sie diese Option in Ihren Controllern, wenn Ihre Variable in Ihren Ansichten verfügbar sein soll.
Die Erklärung ist, dass @title
es sich um eine Instanzvariable und title
eine lokale Variable handelt und Rails Instanzvariablen von Controllern für Ansichten verfügbar macht. Dies liegt daran, dass der Vorlagencode (erb, haml usw.) im Bereich der aktuellen Controller-Instanz ausgeführt wird.
Der Unterschied liegt im Umfang der Variablen. Die @ -Version steht allen Methoden der Klasseninstanz zur Verfügung.
Die kurze Antwort: Wenn Sie sich im Controller befinden und die Variable für die Ansicht verfügbar machen müssen, verwenden Sie @variable
.
Versuchen Sie für eine viel längere Antwort Folgendes: http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html
@variable
s werden in Ruby als Instanzvariablen bezeichnet. Dies bedeutet, dass Sie in JEDER METHODE innerhalb der Klasse auf diese Variablen zugreifen können. [Über alle Methoden in der Klasse hinweg]
Variablen ohne das @
Symbol werden als lokale Variablen bezeichnet. Dies bedeutet, dass Sie nur innerhalb DIESER ERKLÄRTEN METHODE auf diese lokalen Variablen zugreifen können. Beschränkt auf den lokalen Bereich.
Beispiel für Instanzvariablen:
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
In dem obigen Beispiel @cust_id
, @cust_name
, @cust_addr
werden in einem anderen Verfahren in der Klasse zugegriffen. Das Gleiche wäre jedoch mit lokalen Variablen nicht möglich.
Ein Tutorial über Was ist variabler Umfang? präsentiert einige Details ganz gut, fügen Sie einfach die verwandten hier.
+------------------+----------------------+
| Name Begins With | Variable Scope |
+------------------+----------------------+
| $ | A global variable |
| @ | An instance variable |
| [a-z] or _ | A local variable |
| [A-Z] | A constant |
| @@ | A class variable |
+------------------+----------------------+
Auf eine lokale Variable kann nur innerhalb des Blocks ihrer Initialisierung zugegriffen werden. Auch eine lokale Variable beginnt mit einem Kleinbuchstaben (az) oder einem Unterstrich (_).
Und Instanzvariable ist eine Instanz von self
und beginnt mit einer @
Auch eine Instanzvariable gehört zum Objekt selbst. Instanzvariablen sind diejenigen , die Sie Methoden auf , dh durchführen .send
usw.
Beispiel:
@user = User.all
Das @user
ist die Instanzvariable
Und nicht initialisierte Instanzvariablen haben den Wert von Nil
@title
& title
?
@title
odertitle
@ Variablen sind Instanzvariablen, ohne lokale Variablen.
Lesen Sie mehr unter http://ruby.about.com/od/variables/a/Instance-Variables.htm