在Ruby中,如何实现一个新方法创建自身子类的类?

时间:2013-03-06 20:06:27

标签: ruby

在Ruby中,Struct类的new方法创建了一个Struct的子类,它的行为基于传递给它的参数而有所不同。我如何在Ruby中使用自己的类做类似的事情? (我本来会复制Struct的源代码,除了用C语言编写。)

irb(main):001:0> Foo = Struct.new(:foo, :bar)
=> Foo
irb(main):002:0> x = Foo.new
=> #<struct Foo foo=nil, bar=nil>
irb(main):003:0> Foo.superclass
=> Struct

1 个答案:

答案 0 :(得分:3)

class A
  def self.new; Class.new(self) end
end

A.new # => #<Class:0x007f009b8e4200>

编辑这可能更符合OP的意图。

class A
  singleton_class.class_eval{alias :old_new :new}
  def self.new
    Class.new(self){singleton_class.class_eval{alias :new :old_new}}
  end
end