2012-08-28 28 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]