Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby:如何动态创建现有类的子类?_Ruby_Metaprogramming - Fatal编程技术网

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)

我正在编写使用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)
            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
after
define\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