Я довольно часто использую хэш-аргументы для конструкторов, особенно при написании DSL для конфигурации или других битов API, которым будет подвергаться конечный пользователь. В результате я делаю что-то вроде следующего:
class Example
PROPERTIES = [:name, :age]
PROPERTIES.each { |p| attr_reader p }
def initialize(args)
PROPERTIES.each do |p|
self.instance_variable_set "@#{p}", args[p] if not args[p].nil?
end
end
end
Нет ли более идиоматического способа достичь этого? Константа выброса и преобразование символа в строку кажутся особенно вопиющими.