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

少しぎこちなく感じます。より慣れ親しんだ方法がありますか?Rubyでの配列の作成または追加

+10

これを** **慣用であります方法。あなたは '(foo || = [])<<:element'のように1行にすることができますが、私はそれが醜いことがわかります。 –

+3

IMO適切な方法は、初期値を持つことです。同じメソッド内で同じ変数の|| =と<<を持っていれば、IMOはコード臭いがあり、何か間違っています。 || = <<をどうやってするかは、本当の問題を修正するのではなく、単に化粧品をやっているだけです。 – apeiros

答えて

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

しかし、読めるようにするのは本当に大変ですか?

+31

+1「読むことができないようにするのは本当に大変ですか?読みやすさは王様です。 –

+0

'foo'自体が値を参照する(ネストされた)ハッシュのようにもっと複雑な式である場合、これは値を複数回調べたり、検索された配列の値に対して別の変数を使うのを避ける良い方法です。 – sschuberth

49

プッシュ方式は、常に任意の配列で使用できます。私はそれがより好きです。以下のような潜在的な配列、平坦化の利点がある

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

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

また同様に、Kernel#Arrayから利益を得ることができる

# foo = [1] 
foo = Array(foo).push(:element) 
# => [1, :element] 
関連する問題