2012-09-15 120 views
0

假設我有@chicken,但我想通過計數循環將其重命名爲@ chicken1和@ chicken2。一旦我用"chicken#{@count}"之類的東西生成名稱,我該如何將輸出變成類似@ chicken1等的輸出?修改實例變量的名稱

+0

這是可以做到的,但爲什麼你要這樣做?聽起來像你應該使用數組。 – Thomas

+0

那麼,基本上我正在生成谷歌地圖,這對我來說太複雜了,無法爲所有需要推入的數據做一個數組。 – Abram

+0

其實,我在下面過早地點擊了嘀嗒......它並不是真正的我正在尋找..我真正想要的是能夠創建一個新的實例變量使用計數..甚至像一個隨機數,如「@ x#{rand()}」 – Abram

回答

0

Ruby有這樣的任務的方法remove_instance_variable

class A 
    def initialize 
    @chicken = 'chichen' 
    end 

    def rename 
    count = 1 
    instance_variable_set(:"@chicken#{count}", @chicken) 
    end 

    def remove 
    remove_instance_variable(:@chicken) 
    end 
end 

a = A.new 

a.instance_variables #=> [:@chicken] 

a.rename 

a.instance_variables #=> [:@chicken, :@chicken1] 

a.remove 

a.instance_variables #=> [:@chicken1] 

a.instance_variable_get("@chicken1") #=> "chicken" 
+0

請不要使用'eval',除非它絕對*不可避免。 'instance_variable_set'在這裏可以做得很好。 –

+0

@JörgWMittag,已修復 – megas