<<
すでに初期化されていない限り、配列で使用できないことがわかりました。私は現在、次のように書いています。
unless @app
@app = my_array
else
@app << my_array
end
これを書く良い方法はありますか?
以前は ||= を使っていましたが、
(@app ||= []) << [1,2,3]
[[1, 2, 3]] を返しますが、これは望ましくありません。[1, 2, 3] が欲しい
ここでショートカットを使用できます
(@app ||= []) << xxx
@app
配列を変数にプッシュしたい場合は、次を使用concat
する方が良いオプションです。
(@app ||= []).concat [1, 2, 3]
(@app ||= []).concat [4, 5, 6]
@app # => [1, 2, 3, 4, 5, 6]
または、@ ck3g で提案されているように、splat 演算子を使用できます。
> (@app ||= []).push *[1, 2, 3]
=> [1, 2, 3]
is " unarray *
" 演算子です。
> array = [1, 2, 3]
=> [1, 2, 3]
> [*array]
=> [1, 2, 3]
メソッド<<
とメソッドは、複数の引数を取ることができるpush
という点で異なります。push
そして、それは単一の値でも機能します:
> (@app2 ||= []).push *1
=> [1]
ここに 1 つのイディオムがあります。
@app ||= []
@app << xxx
おそらくあなたは << 間違っていますか?<< は、配列のチャンクではなく、配列の要素を意味します。
@app ||= []
@app.concat my_array