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?
ruby-on-rails
ruby
variables
Eine Null
quelle
quelle
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.quelle
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 undtitle
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.quelle
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
quelle
@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:
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.quelle
Ein Tutorial über Was ist variabler Umfang? präsentiert einige Details ganz gut, fügen Sie einfach die verwandten hier.
quelle
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:
Das
@user
ist die InstanzvariableUnd nicht initialisierte Instanzvariablen haben den Wert von
Nil
quelle
@title
&title
?@title
odertitle
@ Variablen sind Instanzvariablen, ohne lokale Variablen.
Lesen Sie mehr unter http://ruby.about.com/od/variables/a/Instance-Variables.htm
quelle