Quelle est la différence entre @title
et title
? Étant donné que les deux peuvent être des noms de variables. Aussi, comment puis-je choisir le type de variable à utiliser? Avec @
ou pas?
title
est une variable locale. Ils n'existent que dans son champ d'application (bloc actuel)
@title
est une variable d'instance - et est disponible pour toutes les méthodes de la classe.
Vous pouvez en lire plus ici: http://strugglingwithruby.blogspot.dk/2010/03/variables.html
Dans Ruby sur Rails - déclarer vos variables dans votre contrôleur en tant que variables d'instance (@title
) les met à la disposition de votre vue.
Utilisez @title
dans vos contrôleurs lorsque vous souhaitez que votre variable soit disponible dans vos vues.
L'explication est que @title
est une variable d'instance et title
est une variable locale et que Rails rend les variables d'instance des contrôleurs disponibles pour les vues. Cela est dû au fait que le code du modèle (erb, haml, etc.) est exécuté dans le cadre de l'instance de contrôleur en cours.
La différence est 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 rendre la variable disponible pour la vue, utilisez ensuite @variable
.
Pour une réponse beaucoup plus longue, essayez ceci: http://www.Ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html
@variable
s sont appelées variables d'instance en 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 That Method. 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 utilisés dans une autre méthode de la classe. Mais la même chose ne serait pas accessible avec des variables locales.
Un didacticiel sur Qu'est-ce que la portée variable? présente assez bien certains détails;.
+------------------+----------------------+
| 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 est uniquement accessible depuis le bloc d'initialisation. De plus, une variable locale commence par une lettre minuscule (a-z) ou un trait de soulignement (_).
Et variable d'instance est une instance de self
et commence par un @
Une variable d'instance appartient également à l'objet lui-même. Les variables d’instance sont celles sur lesquelles vous exécutez des méthodes sur .send
etc.
exemple:
@user = User.all
Le @user
est la variable d'instance
Et les variables d'instance non initialisées ont une valeur de Nil
Les variables @ sont des variables d'instance, sans les variables locales.
En savoir plus sur http://Ruby.about.com/od/variables/a/Instance-Variables.htm