2017-04-14 71 views
-1

我想參考在sum_class_vars範圍內動態創建的類變量foo1,foo2foo3而不知道它們的標識符是什麼。舉例來說,我們可以實現一個sum函數,它將變量相加。如何在類範圍內創建並引用動態創建的類變量

class Test 
     def initialize 
     end 

     def sum_class_vars 
     end 
    end 

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

我該怎麼做?

+0

t.foo1 t.foo2 t.foo3 –

回答

2

與往常一樣變量,但聲明後,只能使用:

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

您應該明確指出,這隻會爲特定實例't'創建訪問器。 –

+0

@CarySwoveland你是絕對正確的。僅用於't'實例。我認爲@horror_fan知道是否使用'class << t' – idej

+0

就像我說過的那樣,Ruby是新的,我認爲class << t是你如何添加類變量。我對實例變量不感興趣。我想將類變量添加到我的類中,並能夠在不知道它們的特定標識符的情況下引用它們。我不在乎總結這只是一個例子。在你的例子中 –

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@foo2實例變量,不類變量(或類的實例變量)。

+0

那麼我如何創建類變量並引用它們,即時通訊對實例變量不感興趣。我編輯了這篇文章,使其更加清晰。 –

+0

使用[Module#class_variable_set](https://ruby-doc.org/core-2.4.0/Module.html#method-i-class_variable_set)來動態創建類變量。你的評論告訴我,@idej和我都不瞭解你的問題。 –

+0

我認爲它是我剛剛提出的問題,由於剛剛接觸ruby,誤解了一些ruby的概念。 –