Rubyで配列を作成または追加する


83
foo ||= []
foo << :element

少し不格好に感じます。もっと慣用的な方法はありますか?


11
これ慣用的な方法です。として一行することもでき(foo ||= []) << :elementますが、見苦しいです。
Sergio Tulentsev 2012

4
IMOの適切な方法は、初期値を設定することです。同じメソッド内の同じ変数に|| =と<<がある場合、IMOにはコードの臭いがあり、すでに何か間違ったことをしています。方法を尋ねる|| = <<うまく、本当の問題を修正するのではなく、化粧品をするだけです。
apeiros 2013

回答:


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

しかし、まあ。読みやすくするのは本当に面倒ですか?


39
「読みやすくするのは本当に面倒ですか?」の+1 読みやすさが重要です。
ブリキの

場合はfoo、それ自体があなたが値を検索する(ネストされた)ハッシュのような、より複雑な式であり、これは値を複数回見上げたり見上げた配列値のために別の変数を費やして回避するための良い方法です。
sschuberth 2015

60

どの配列でもpushメソッドをいつでも使用できます。私はそれがもっと好きです。

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

10

次のように、Kernel#Arrayの恩恵を受けることもできます。

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

これには、次のような潜在的な配列をフラット化するという利点があります。

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

私は確かに常にそのRubyで保証されるとは限らないんだfoo = fooセットfooに定義されていません。また、平らになりません。配列の場合は返されます。nilfooKernel#Arrayfoofoo
EricDuminil19年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.