ruby元编程超类不继承

Mar*_*rce 1 ruby metaprogramming

当我使用Array作为超类创建一个匿名类时,Array方法<<和[] =不会被继承.我的代码如下

class SubArray < Array
end

sa = SubArray.new
sa << "foo"
puts sa.inspect

sa_meta = Class.new(Array)
sa_meta << "foo"
puts sa_meta.inspect
Run Code Online (Sandbox Code Playgroud)

给出结果:

["foo"]
lib/so_example1.rb:9:in `<main>': undefined method `<<' for #<Class:0x6b10b8e4> (NoMethodError)
Run Code Online (Sandbox Code Playgroud)

我的红宝石版本是:

ruby 1.9.3p194 (2012-04-20 revision 35410) [i386-darwin11.4.2]
Run Code Online (Sandbox Code Playgroud)

如何用超类动态创建一个类?

Ser*_*sev 6

数组方法<<和[] =没有继承

当然可以!只是不要忘记创建类的实例.

sa_meta_klass = Class.new(Array)
sa_meta = sa_meta_klass.new
sa_meta << "foo"
puts sa_meta.inspect
# >> ["foo"]
Run Code Online (Sandbox Code Playgroud)