2

在 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
4

1 回答 1

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
于 2013-03-06T20:11:25.553 回答