К сожалению, не существует простого, практичного способа .Эквивалент Ruby будет выглядеть как уродливый, уродливый зверь:
((((@date[month] ||= {})[day] ||= {})[hours] ||= {})[min] ||= {})[sec] = 1
Существует способ назначить значения по умолчанию для отсутствующих ключей в хешах, однако:
@date = Hash.new { |hash, key| hash[key] = {} }
# @date[:month] is set to a new, empty hash because the key is missing.
@date[:month][:day] = 1
К сожалению, это не работает рекурсивно.
... если только вы не создадите его сами ;Ура для Ruby!
class Hash
def self.recursive
new { |hash, key| hash[key] = recursive }
end
end
@date = Hash.recursive
@date[month][day][hours][min][sec] = 1
# @date now equals {month=>{day=>{hours=>{min=>{sec=>1}}}}}
Имейте в виду, что все неустановленные значения теперь {}
, а не nil
.