class << self
attr_accessor :n, :totalX, :totalY
end
La syntaxe ci-dessus est utilisée pour définir les variables d'instance de classe. Mais quand je pense à ce que la syntaxe implique, cela n'a aucun sens pour moi, donc je me demande si ce type de syntaxe est utilisé pour d'autres types de définitions. Mon point de confusion ici est la suivante:Dans Ruby, existe-t-il des applications connexes de la syntaxe: class << self ... end
class << self
L'opérateur append signifie normalement « ajouter ce qui est sur le droit à l'objet à gauche ». Mais dans le contexte de ce bloc, comment cela se traduit-il par "mettre le contenu de ce bloc dans la définition de l'instance de classe plutôt que dans l'instance"?
Pour la même raison, je suis confus quant à pourquoi dans un contexte de classe < < auto peut définir des variables d'instance de classe alors que dans une autre, il semble créer des variables de classe comme ici:
class Point
# Instance methods go here
class << self
# Class methods go here
end
end
Ok - que » s une bonne façon de voir - la classe est en fait un dictionnaire. Mais en fait, vous avez répondu avant d'ajouter mon dernier exemple où, dans un autre contexte, la même syntaxe (selon le livre que je suis en train de lire) produit des méthodes de classe au lieu de méthodes d'instance de classe. Pourquoi l'exemple de classe Point dans la partie inférieure génère-t-il une méthode de classe alors que l'attribut attr_accessor en haut vous donne des attributs qui sont au niveau de l'instance de classe? –
En fait, en utilisant l'explication que vous avez donnée, je peux peut-être répondre à la question dans mon précédent commentaire - la méthode attr_accessor appelle les méthodes instance_variable_set et instance_variable_get de la classe Class. Normalement, cela se traduirait par la création de variables d'instance, mais parce que nous ajoutons au dictionnaire de classe, comme nous le disons, nous créons des variables d'instance de classe. Ok, je pense que je l'ai maintenant. Merci. –
-1 trompeuse, puisque la classe << x ... end ajoute en fait des informations à la métaclasse de x, pas à la classe de x. – rampion