variables de classe; raccourcis syntaxiques [résolu] - Ruby/Rails - Programmation
Marsh Posté le 28-06-2009 à 10:14:34
http://blade.nagaokaut.ac.jp/cgi-b [...] alk/272994
http://stackoverflow.com/questions [...] -variables
Franchement, google quoi...
Marsh Posté le 28-06-2009 à 19:23:03
masklinn a écrit : http://blade.nagaokaut.ac.jp/cgi-b [...] alk/272994 |
Pour te parodier :
"Franchement lunettes quoi"
C'est ce que j'utilise, cf les 10 premières lignes de la VERSION_BUGGUEE
Tes liens n'expliquent pas comment initialiser proprement cette variable car si je fais avec la VERSION_BUGGUEE comme indiqué dans mon premier post :
puts MaClasse.chaineDeClasse
ca m'affiche une ligne vide au lieu de "zzzz" alors que j'ai @@chaineDeClasse = "zzzz" de déclaré à l'intérieur de la classe
Marsh Posté le 28-06-2009 à 19:31:03
flashball a écrit :
|
Mes lunettes fonctionnent bien, puisque j'arrive à lire le contenu de ces liens et toi pas.
Un indice pour vous dans votre salon: attr_accessor, ça crée un attribut d'instance, donc @foo. Toujours
Marsh Posté le 28-06-2009 à 19:35:20
je ne comprends pas puisque il me semble que je fais la même chose :
class MaClasse
class << self
attr_accessor :chaineDeClasse
end
j'utilise pas rails hein, que ruby1.9 et 1.8
Marsh Posté le 28-06-2009 à 19:42:31
merci donc apparemment il ne faut garder qu'un arobase même si c'est une variable de classe. Pourquoi ??
Et maintenant comme je fais pour avoir une variable d'instance qui se nomme pareil ?
Marsh Posté le 28-06-2009 à 19:45:43
merci Masklin, ca ca marche :
class MaClasse
class << self
attr_accessor :chaineDeClasse
end
@chaineDeClasse = "zzzz" #
end
puts MaClasse.chaineDeClasse
Marsh Posté le 28-06-2009 à 19:51:30
flashball a écrit : merci donc apparemment il ne faut garder qu'un arobase même si c'est une variable de classe. Pourquoi ?? |
Parce qu'il y a 3 types de variables en Ruby: variable de classe, variable d'instance et variable locale. Mais une classe est aussi une instance de quelque chose (de la métaclasse Class pour être précis), une classe peut donc avoir des variables d'instance qui sont différentes des variables de classe d'une de ses instances (et les variables de classe d'une classe portent sur Class).
Marsh Posté le 28-06-2009 à 20:15:04
En utilisant class << self ; attr_accessor etc.
pour avoir accès aux variables de classe à l'intérieur des méthodes d'instances ( initialize par exemple) il faut utiliser self.class.ma_variable_de_classe
Marsh Posté le 28-06-2009 à 04:20:50
Salut tout le monde je cherche comment initialiser une variable de classe en utilisant les raccourcis syntaxiques
Le problème est que si j'utilise attr_accesor pour une variable de classe, je n'arrive pas à initialiser cette variable à l'intérieur de la classe.
sans le raccourci ca marche: [j'ai pas utilisé la balise cpp car avec cette dernière en faisant un copier coller sans sélectionner les numéros de lignes on les recopie quand même]
###DEBUT_VERSION_OK#####################
##########################################
class MaClasse
def self.chaineDeClasse=(cc)
@@chaineDeClasse = cc
end
def self.chaineDeClasse
@@chaineDeClasse
end
@@chaineDeClasse = "zzzz"
end
obj = MaClasse.new()
puts MaClasse.chaineDeClasse # ca marche, affiche zzzzz
MaClasse.chaineDeClasse = "aaaa"
puts MaClasse.chaineDeClasse #ici ca marche, affiche aaaa
###FIN_VERSION_OK#######################################
#########################################################
mais la même code en utilisant le raccourci attr_accesor (pour les variables de classe) à la place des méthodes self.chaineDeClasse cela ne marche pas
###DEBUT_VERSION_BUGGUEE###########################
#######################################################
class MaClasse
class << self
attr_accessor :chaineDeClasse
end
@@chaineDeClasse = "zzzz" #ne renvoie pas d'erreur mais n'a pas l'air d'initialiser la variable de classe
end
obj = MaClasse.new()
puts MaClasse.chaineDeClasse # ca bug ici : ca m'affiche une ligne vide
MaClasse.chaineDeClasse = "aaaa"
puts MaClasse.chaineDeClasse #la ca marche, affiche "aaaa"
###FIN_VERSION_BUGGUEE##############################
#######################################################
Message édité par flashball le 28-06-2009 à 20:11:42