2012-09-15 124 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