2010-10-19 6 views
3
class Foo 
    @@default = "default" 

    p instance_variables 
    p class_variables 

    class << self 
    p instance_variables 
    p class_variables 

    # How do I access the @@default variable here? 
    end 
end 

Répondre

2

De la même manière que vous le faites dans n'importe quel autre endroit: @@default.

Je ne suis pas sûr de ce que p .. est censé faire (Ruby n'est pas ma langue maternelle), mais cela fonctionne

class Foo 
    @@default = "default" 

    class << self 
    puts "#{@@default}" 
    end 
end 
+0

Eh bien, je me sens stupide. Thanks = p – RyanScottLewis

+3

'p' est un moyen paresseux d'écrire' puts': P – david4dev

+1

La méthode "p" appelle '# inspect', puis appelle' puts() 'sur le résultat. C'est plus une méthode de débogage alors que 'puts()' est une méthode de sortie à usage général. – DigitalRoss

1

Cette question est assez intéressant parce qu'il demande en substance « est-il un moyen Et pour autant que je peux dire, la réponse est "non", parce que tous les pointeurs ancêtres "ascendants" Ruby garde aussi pointent vers les métaclasses, et ainsi de suite class_variables() dans l'un d'eux vous dira sur ses variables d'instance de classe Donc, vous devez référencer des objets par nom ou juste établir un handle avant d'entrer dans le contexte de la métaclasse ...

class Foo 
    @@default = "default" 
    @@me = self 

    p instance_variables 
    p class_variables 

    class << self 
    p instance_variables 
    p @@me.class_variables 
    end 
end 
Questions connexes