2012-04-24 62 views
0

我看起來很高,也許我只是練習一點,但我似乎無法找到如何做到以下幾點。在Ruby中通過字符串訪問成員?

我有一個字符串/符號,例如"a":a。該類B包含一個數據成員@a。我期待訪問該成員以這樣的方式:

def method object_of_class_B, string_or_symbol_referencing_the_member 
    object_of_class_B.some_other_method string_or_symbol_referencing_the_member = 010 
end 

這樣我就可以撥打電話:

method c, :a 

,並有同樣的效果,如果我寫了:

c.a = 010 

燦任何人都指向我的解決方案?在學習中,我完全錯過了關鍵Ruby的一部分嗎?

回答

4

您可以使用send調用設置方法是這樣的:

object_of_class_B.send("#{ string_or_symbol_referencing_the_member }=", 010) 
1

如果對象還沒有一個訪問的屬性,你可以在對象上使用instance_variable_set

例如:

c = SomeClass.new 
c.instance_variable_set(:@a, 'new value') 
+0

這僅與調用'C.A =「新value''同樣的效果,如果一個'='方法設置實例變量'@了'並沒有別的。例如,如果'c'是一個活動記錄對象,那麼使用instance_variable_set不會產生所需的效果。 – sepp2k 2012-04-24 14:28:52

+0

雖然第二個想法,OP確實說他有一個實例變量@a。所以沒關係...... – sepp2k 2012-04-24 14:29:57

+0

你是對的。 @xuinkrbin需要熟悉他/她'擺弄'的課程。 – Jamie 2012-04-24 14:32:50