Обычно лучше всего инкапсулировать безопасные значения по умолчанию в хэш, который объявлен как константа. Например:
требуется 'ostruct'
require 'ostruct'
class Tiger < OpenStruct
DEFAULTS = {
:num_stripes => 12,
:max_speed => 43.2
}.freeze
def initialize(options = { })
super(DEFAULTS.merge(options))
end
end
tiger = Tiger.new(:max_speed => 19.95)
puts tiger.max_speed
puts tiger.num_stripes
Важно отметить, что при объединении объектов Hash ключи String и Symbol отличаются друг от друга и не будут комбинироваться, как вы могли ожидать. В среде Rails вы всегда можете преобразовать одно в другое, используя Hash # symbolize_keys или объявив их как HashWithIndifferentAccess, который отображает разницу для вас.