2

Rubyでは、Structクラスのメソッドは、渡されたパラメーターに基づいて異なる動作newをするサブクラスを作成します。StructRubyで自分のクラスと同じようなことをするにはどうすればよいですか?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 に答える