【发布时间】:2011-11-14 11:30:12
【问题描述】:
我正在编写一个函数来动态创建类。我遇到了 *vars 变量(如下)的问题,在传递给 Class::new 的块内,“def initialize”方法看不到 *vars 的值(因此 Ruby 在 *vars 上报告未绑定变量错误)。
怎么办?
谢谢!
class MyParentClass
def do_something_with(*args)
end
def do_something_else_with(*vars)
end
end
def create_class(class_name,*vars)
new_class = Class::new(MyParentClass) do
def initialize(*args)
super
do_something_with(args)
do_something_else_with(vars)
end
end
Object::const_set(class_name.intern,new_class)
end
# Ruby: Error: *vars is unbound variable
# My notes: *vars is in scope inside the do..end block passed to Class::new, but cannot be seen inside def initialize (why?) . And, how to fix this?
【问题讨论】:
-
您可以使用类变量来破解它来存储数据,然后在初始化函数中检索它。但是,我正在寻找更清洁的解决方案(如果有的话?)我已经尝试过了,并且使用 class_var hack 可以正常工作。使用类变量是有意义的,因为如果我要自己手动继承 MyParentClass,在代码中通过键入,我将调用“do_something_else_with(vars)”,变量是我在代码中键入的静态字符串;我想手动将其输入源代码与将其动态存储在 class_var 中相同 - 它必须存储在某个地方!