2012-08-28 27 views
62
foo ||= [] 
foo << :element 

感觉有点笨重。有没有更习惯的方式?在Ruby中创建或追加到数组中

+10

这** **是惯用办法。你可以把它作为'(foo || = [])<<:element',但我觉得它更丑。 –

+3

IMO的正确方法是有初始值。如果你在同一个方法中有相同的变量|| =和<<,你的IMO有一个代码异味,并且已经做了一些错误。问怎么做|| =“很好只是在做化妆品而不是解决真正的问题。 – apeiros

回答

103
(foo ||= []) << :element 

但是meh。保持可读性真的很繁琐吗?

+31

+1:“保持可读性真的太繁重吗?”可读性是王道。 –

+0

如果'foo'本身是一个更复杂的表达式,就像在其中查找值的(嵌套)散列一样,这是避免多次查找值或花费另一个变量来查找数组值的好方法。 – sschuberth

49

您也可以在任何阵列上始终使用push方法。我更喜欢它。

(a ||= []).push(:element) 
2

你也可以受益于Kernel#Array,如:

# foo = nil 
foo = Array(foo).push(:element) 
# => [:element] 

具有压扁潜在阵列,像的好处:

# foo = [1] 
foo = Array(foo).push(:element) 
# => [1, :element]