在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
答案 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