Ввод хеша со значениями по умолчанию
Я хотел бы инициализировать класс с отдельными членами хеша, установленными на значения по умолчанию, я пробовал следующее:
class SomeClass
attr_accessor :hello, :holla
def initialize ( hash = { hello: 'world', holla: 'mundo'})
@hello = hash[:hello]
@else = hash[:holla]
end
end
который работает как нужно, если не вводить аргументы
p = SomClass.new
puts "should be 'world'"
puts p.hello
puts "should be 'mundo'"
puts p.holla
$ruby hello_world.rb
should be 'world'
universe
should be 'mundo'
mundo
но если один из дополнений хэша установлен, другой остается пустым, например:
p = SomeClass.new( { hello: 'universe'})
puts "should be 'universe'"
puts p.hello
puts "should be 'mundo'"
puts p.holla
$ruby hello_world.rb
should be 'universe'
universe
should be 'mundo'
Как я могу ввести хэш в качестве аргумента для инициализации в усадьбе, которая устанавливает значения по умолчанию для отдельных членов хэша, а именно хэш, который он сам?
1 ответ
Решение
Нет способа сделать это без специального кода. Простейшая версия этого будет:
def initialize(hash = {})
hash = {hello: "world", holla: "mondo"}.merge(hash)
# now your default values are set, but will be overridden by the passed argument
end
Это позволит передавать дополнительные свойства в хеш, но я предполагаю, что это желательно, поскольку вы намеренно использовали расширяемый ввод для начала.