Struct.new
создает новый класс для каждой вашей загрузки.
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
или Вы можете использовать стиль блока Struct.new
вместо ключевого слова class
, которое будет выдано warning: already initialized constant Test3
только при перезагрузке файла.
irb(main):023:0> Test3 = Struct.new(:id) do
def my_methods
"this is a method"
end
end