Создание HashMap этих объектов на основе значения поля как ключ могло стоить с точки зрения производительности, например, заполнить Карты однажды и найти объекты очень эффективно
Вы можете определить функцию инициализации в своем классе:
class A
attr_accessor :b,:c,:d
def initialize(h)
h.each {|k,v| public_send("#{k}=",v)}
end
end
Или вы можете создать модуль, а затем «смешать его с "
module HashConstructed
def initialize(h)
h.each {|k,v| public_send("#{k}=",v)}
end
end
class Foo
include HashConstructed
attr_accessor :foo, :bar
end
В качестве альтернативы вы можете попробовать что-нибудь вроде конструктора