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

在Ruby中修改类外的实例变量,ruby,metaprogramming,instance-variables,Ruby,Metaprogramming,Instance Variables,有谁能告诉我如何在类之外修改一个只有一行的类或实例变量吗?所以,考虑到这个代码 class Dummy def initialize() @var = 0 end def value @var * 2 end end d = Dummy.new 我不能改变以上任何一项。我只能添加一行,以便d.value返回6。有什么诀窍可以做到这一点吗 d.instance_variable_set("@var", 3) 但不要在实际的程序中

有谁能告诉我如何在类之外修改一个只有一行的类或实例变量吗?所以,考虑到这个代码

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

d = Dummy.new
我不能改变以上任何一项。我只能添加一行,以便d.value返回6。有什么诀窍可以做到这一点吗

d.instance_variable_set("@var", 3)
但不要在实际的程序中这样做<代码>实例变量集主要用于元编程。如果你在其他环境中使用它,你几乎肯定是做错了


但不要在实际的程序中这样做<代码>实例变量集主要用于元编程。如果你在其他环境中使用它,你几乎肯定是做错了。

Chuck回答的另一种选择:

d、 实例_eval{@var=3}


Chuck答案的另一种选择:

d、 实例_eval{@var=3}

瞧,只有一行,就像OP想要的一样


瞧,只有一行,就像OP想要的一样。

是的,我认为这样做是错误的,但这就是问题的措辞。谢谢(虽然这些天我会传递一个符号。)@DaveNewton:嘿,真的。我非常习惯在那里使用字符串(因为通常我使用的是一个动态命名的变量),所以我只是不需要输入字符串。是的,我认为这样做是错误的,但这就是问题的措辞。谢谢(虽然这些天我会传递一个符号。)@DaveNewton:嘿,真的。我非常习惯在那里使用字符串(因为通常我使用的是一个动态命名的变量),所以我只需要输入一个字符串,即使它是不必要的。尝试
def d.set__dup_值(val)@var=val end;d、 设置愚蠢的值(3)
下面有一个滚动条。尝试
def d.set__dup_值(val)@var=val end;d、 设置值(3)
class Dummy; def set_the_stupid_value(val) @var = val end end; d.set_the_stupid_value(3)