Quelle est la différence entre @title
et title
? Puisque les deux peuvent être des noms de variables. De plus, comment puis-je décider du type de variable à utiliser? Avec @
ou pas?
Quelle est la différence entre @title
et title
? Puisque les deux peuvent être des noms de variables. De plus, comment puis-je décider du type de variable à utiliser? Avec @
ou pas?
Réponses:
title
est une variable locale. Ils n'existent que dans sa portée (bloc actuel)
@title
est une variable d'instance - et est disponible pour toutes les méthodes de la classe.
Vous pouvez en savoir plus ici: http://strugglingwithruby.blogspot.dk/2010/03/variables.html
Dans Ruby on Rails - déclarer vos variables dans votre contrôleur en tant que variables d'instance ( @title
) les rend disponibles pour votre vue.
À utiliser @title
dans vos contrôleurs lorsque vous souhaitez que votre variable soit disponible dans vos vues.
L'explication est qu'il @title
s'agit d'une variable d'instance et d' title
une variable locale et que rails rend les variables d'instance des contrôleurs disponibles pour les vues. Cela se produit car le code du modèle (erb, haml, etc.) est exécuté dans le cadre de l'instance de contrôleur actuelle.
La différence réside dans la portée de la variable. La @version est disponible pour toutes les méthodes de l'instance de classe.
La réponse courte, si vous êtes dans le contrôleur et que vous devez mettre la variable à la disposition de la vue, puis l'utiliser @variable
.
Pour une réponse beaucoup plus longue, essayez ceci: http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html
@variable
les s sont appelées variables d'instance dans ruby. Ce qui signifie que vous pouvez accéder à ces variables dans N'IMPORTE QUELLE MÉTHODE à l'intérieur de la classe. [Dans toutes les méthodes de la classe]
Les variables sans le @
symbole sont appelées variables locales, ce qui signifie que vous pouvez accéder à ces variables locales uniquement dans cette méthode déclarée. Limité à la portée locale.
Exemple de variables d'instance:
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
Dans l'exemple ci - dessus @cust_id
, @cust_name
, @cust_addr
sont accessibles dans une autre méthode dans la classe. Mais la même chose ne serait pas accessible avec des variables locales.
Un tutoriel sur Qu'est-ce que la portée variable? présente assez bien certains détails, il suffit de joindre les informations connexes ici
+------------------+----------------------+
| Name Begins With | Variable Scope |
+------------------+----------------------+
| $ | A global variable |
| @ | An instance variable |
| [a-z] or _ | A local variable |
| [A-Z] | A constant |
| @@ | A class variable |
+------------------+----------------------+
Une variable locale n'est accessible qu'à partir du bloc de son initialisation. Une variable locale commence également par une lettre minuscule (az) ou un trait de soulignement (_).
Et la variable d'instance est une instance de self
et commence par une @
également une variable d'instance appartient à l'objet lui-même. Les variables d'instance sont celles sur lesquelles vous effectuez des méthodes, par exemple, .send
etc.
exemple:
@user = User.all
La @user
est la variable d'instance
Et les variables d'instance non initialisées ont une valeur de Nil
@title
& title
?
@title
outitle
Les variables @ sont des variables d'instance, sans sont des variables locales.
En savoir plus sur http://ruby.about.com/od/variables/a/Instance-Variables.htm