は、あらゆる負荷に対して新しいクラスを作成しています。
irb(main):001:0> class Test1 < Struct.new :id; end
nil
irb(main):003:0> class Test1 < Struct.new :id; end
TypeError: superclass mismatch for class Test1
from (irb):3
from /usr/bin/irb:12:in `<main>'
あなたのStruct.new
を保存することができますが、変数にclass
を返されて、あなた はそれが常に同じclass
になります使用することができます。
irb(main):004:0> Id = Struct.new :id
#<Class:0x00000002c35b20>
irb(main):005:0> class Test2 < Id; end
nil
irb(main):006:0> class Test2 < Id; end
nil
またはあなたは、あなたのファイルをリロード とき、それは のみwarning: already initialized constant Test3
を与える代わりにclass
キーワードのStruct.new
ブロックのスタイルを使用することができます。
irb(main):023:0> Test3 = Struct.new(:id) do
def my_methods
"this is a method"
end
end
。しかし、これはSporkで私を助けません。各種類のStructの定数を作成すると、目的を破ることができます – synapse
@synapse 'Struct.new'は常に新しいクラスを返します。おそらく、同じ型のメソッド(アクセサで作成できる)をモジュールに分割し、それらを 'include'することができます。 –