Инициализировать хэш нескольких уровней в рельсах
Поэтому у меня некоторые коды выглядят следующим образом:
@foo ||= {}
@foo[:bar] ||= {}
@foo[:bar][:baz] ||= {}
Я не о производительности, а о чистоте. Есть ли более красивый или лучший способ сделать это?
2 ответа
Решение
Я думаю, что у вас есть хороший, лаконичный способ написания кода, но ниже приведен еще один способ сделать то же самое. Это все равно сделает работу, если вы предпочитаете быть более многословным:
if @foo.nil?
@foo = { :bar => { :baz => {} } }
else if @foo[:bar].nil?
@foo[:bar] = { :baz => {} }
else if @foo[:bar][:baz].nil?
@foo[:bar][:baz] = {}
end
или же
if !@foo
@foo = { :bar => { :baz => {} } }
else if !@foo[:bar]
@foo[:bar] = { :baz => {} }
else if !@foo[:bar][:baz]
@foo[:bar][:baz] = {}
end