在Ruby中修改类之外的实例变量

时间:2011-12-13 00:54:01

标签: ruby metaprogramming instance-variables

有人能告诉我如何在只有一行的类之外修改类或实例变量吗?所以,鉴于此代码

class Dummy
    def initialize()
        @var = 0
    end
    def value
        @var * 2
    end
end

d = Dummy.new

我无法改变上述任何一项。我只能添加一个行,以便d.value返回6.是否有任何技巧可以执行此操作?

3 个答案:

答案 0 :(得分:3)

d.instance_variable_set("@var", 3)

但是不要在实际程序中这样做。 instance_variable_set主要用于元编程。如果你在其他一些环境中使用它,你几乎肯定做错了。

答案 1 :(得分:1)

Chuck回答的另一种选择:

  

d.instance_eval {@var = 3}

答案 2 :(得分:0)

class Dummy; def set_the_stupid_value(val) @var = val end end; d.set_the_stupid_value(3)

Voilà,只有一条线,就像OP想要的那样。