0

所以我有一些代码如下所示:

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

我关心的不是性能,而是清洁度。有没有更漂亮或更好的方法呢?

4

2 回答 2

1
{:bar => {:baz => {}}}.merge(@foo)
于 2011-03-21T03:48:27.207 回答
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 !@foo
    @foo = { :bar => { :baz => {} } }
else if !@foo[:bar]
    @foo[:bar] = { :baz => {} }
else if !@foo[:bar][:baz]
    @foo[:bar][:baz] = {}
end
于 2011-03-21T03:46:04.323 回答