Ruby:如何动态创建现有类的子类?
我正在编写使用Object.const_set创建新类的Ruby代码,它非常适合创建新类并实例化它们的实例。但我希望这些新类继承自我已经硬编码的类。我找不到这样做的方法。这是我的密码:Ruby:如何动态创建现有类的子类?,ruby,metaprogramming,Ruby,Metaprogramming,我正在编写使用Object.const_set创建新类的Ruby代码,它非常适合创建新类并实例化它们的实例。但我希望这些新类继承自我已经硬编码的类。我找不到这样做的方法。这是我的密码: def create_model_class(klass_name, klass_vars) klass = Object.const_set(klass_name, Class.new) klass.class_eval do define_method(:initialize)
def create_model_class(klass_name, klass_vars)
klass = Object.const_set(klass_name, Class.new)
klass.class_eval do
define_method(:initialize)
klass_vars.each_with_index do |name, i|
instance_variable_set("@"+name[i], name[i])
end
end
end
end
Class.new
接受一个参数,该参数将是超类
文档:。我忘了,塞尔吉奥。谢谢你的小树枝。远优于“B级1。我不确定在哪里使用参数调用Class.new–我猜是在为类名定义常量之后?2.我看到了这一点,显然对于元编程中的某些事情来说,eval是唯一的方法,尽管我知道它是如何产生安全问题的。我认为
do
afterdefine\u方法
已经越狱了。似乎klass\u vars
是一个二维数组。这是有意的吗?如果klass_vars只是一个字符串数组,我认为您需要将each_with_index
更改为each
,并删除对I
的引用。根据塞尔吉奥的建议,我相信你会在参数中添加parent\u class
,在类中添加(parent\u class)
。新建,或者在参数中添加parent\u class\u name
,在类中添加(parent\u class\u name.to\u sym)
新的。嘿,卡里,克拉斯·瓦尔斯是个杂凑。我只是实现了它的一部分,所以在这个示例代码中留下它可能会使池变得混乱。谢谢你的锐利目光。当然是杂烩。。。但是可能会返回错误的do
。