【发布时间】:2012-05-14 13:23:04
【问题描述】:
我有以下代码,旨在将普通变量转换为实例变量。
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。如何让代码做我想做的事?
【问题讨论】:
-
代码示例定义了一个
foo,它只在class...end块中可见。即使你回到 X 类,它也消失了——它是词汇范围的一部分,而不是类。这些“正常”变量在创建它们的范围之外永远不可见。一旦你点击了关闭它们的块的end,它们就只能被该块中定义的代码访问。而且上面没有任何这样的代码。您要解决的实际问题是什么? -
你到底为什么想要这个复杂的代码?你的目标是什么?
标签: ruby class dynamic methods instance-variables