2017-04-14 1 views
-1

Je veux faire référence aux variables de classe créées dynamiquement foo1, foo2, et foo3 dans le cadre de sum_class_vars sans connaître leurs identifiants. Par exemple, permet d'implémenter une fonction sum, qui résume les variables.Comment créer et faire référence à une variable de classe créée dynamiquement dans la portée de classe

class Test 
     def initialize 
     end 

     def sum_class_vars 
     end 
    end 

    t = Test.new 
    #add class variables foo1 foo2 foo3 to Test 

Comment est-ce que je peux faire ceci?

+0

t.foo1 t.foo2 t.foo3 –

Répondre

2

Comme avec les variables habituelles, mais utiliser seulement après la déclaration:

class Test  
    def initialize 
    end 

    def sum_class_vars 
    foo1 + foo2 + foo3 
    end 
end 

t = Test.new 

class << t 
    attr_accessor :foo1, :foo2, :foo3 
end 

t.foo1 = t.foo2 = t.foo3 = 2 

p t.sum_class_vars 
#=> 6 
+0

Vous devez préciser que cela crée uniquement des accesseurs pour l'instance particulière 't'. –

+0

@CarySwoveland vous avez absolument raison. Juste pour 't' exemple. Je pensais que @horror_fan sait si utiliser 'class << t' – idej

+0

Comme je l'ai dit im nouveau à Ruby et je pensais que class << t est comment vous ajoutez des variables de classe. Je ne suis pas intéressé par les variables d'instance. Je veux ajouter des variables de classe à ma classe et pouvoir y faire référence sans connaître leurs identifiants spécifiques. Je ne me soucie pas de la somme de ceci était juste un exemple. –

0
class Test 
    def sum_instance_vars 
    foo1 + foo2 
    end 
end 

Test.send(:attr_accessor, :foo1, :foo2, :foo3) 

t1 = Test.new 
    #=> #<Test:0x007fe12c014838> 
t1.foo1 = 1 
t1.foo2 = 2 
t1 
    #=> #<Test:0x007fe12c014838 @foo2=2, @foo1=1> 
t1.sum_instance_vars 
    #=> 3 

@foo1 et @foo2 sont variables d'instance, non variables de classe (ou variables d'instance de classe).

+0

alors comment puis-je créer des variables de classe et s'y référer, je ne suis pas intéressé par les variables d'instance. J'ai édité le post pour le rendre plus clair. –

+0

Utilisez [Module # class_variable_set] (https://ruby-doc.org/core-2.4.0/Module.html#method-i-class_variable_set) pour créer des variables de classe de façon dynamique. Votre commentaire me dit que ni @idej ni moi ne comprenons votre question. –

+0

Je pense que c'est juste que j'ai juste mal formulé la question en raison d'être nouveau à ruby ​​et malentendu avec quelques concepts de rubis. –