Один из многих способов сделать это - использовать class_eval
, define_method
и т. Д. Для динамического построения класса:
dynamic_properties = {
'name' => 'bob',
'phone' => '555-1212'
}
class_instance = Object.const_set('MyClass', Class.new)
class_instance.class_eval do
define_method(:initialize) do
dynamic_properties.each do |key, value|
instance_variable_set("@#{key}", value);
end
end
dynamic_properties.each do |key, value|
attr_accessor key
end
end
Вы можете потреблять этот класс позже следующим образом:
>> my_object = MyClass.new
>> puts my_object.name
=> 'bob'
>> puts my_object.phone
=> '555-1212'
Но это не было бы Руби, если есть только один способ сделать это!
насчет делать что-то вроде 'Бобом = Object.new'? –