我有以下代码,意味着将正常变量转换为实例变量。
BasicObject.class_eval do
def instance(ins)
self.instance_variable_set("@#{ins}", ins)
end
end
让我们说用户说
class X
foo = 3
end
bar = X.new
bar.instance(:foo)
我想要它做的是将新创建的变量@foo
设置为3,而是将@foo
设置为:foo
。如何使代码按照我的要求进行操作?
答案 0 :(得分:1)
在instance
方法中,参数ins
包含变量的名称,而不是其值。如上所述,从那时起就没有办法达到它的价值。
如果从源代码实际可见的代码中的某个点调用instance
,这不在您的示例中(请参阅上面的注释),您也可以传递局部变量绑定,然后使用那。像这样:
def instance(var, bound)
eval "@#{var}=#{var}", bound
end
哪个会这样:
foo = 3
instance('foo', binding)
@foo # => 3