2011-03-21 31 views
0

所以我有一些代碼如下所示:初始化一個多層次的散列軌

@foo ||= {} 
@foo[:bar] ||= {} 
@foo[:bar][:baz] ||= {} 

我不是關於性能,但清潔。有沒有更美麗的方式或更好的方式來做到這一點?

回答

1
{:bar => {:baz => {}}}.merge(@foo) 
+0

它的工作原理!謝謝 – PeterWong 2011-03-21 04:00:45

0

我認爲你擁有的是編寫代碼的好方法,但下面是我認爲要做同樣事情的另一種方式。它還是會做的工作,如果你願意更詳細:

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 [email protected] 
    @foo = { :bar => { :baz => {} } } 
else if [email protected][:bar] 
    @foo[:bar] = { :baz => {} } 
else if [email protected][:bar][:baz] 
    @foo[:bar][:baz] = {} 
end 
+0

感謝您的建議,但我寧願希望有一個更簡單的方法做它...... – PeterWong 2011-03-21 03:47:42