web-dev-qa-db-ja.com

Ruby-Array#<<とArray#pushの違い

Ruby 1.9.3のドキュメントを調べると、Array#<<とArray#Pushの両方が、現在の配列の最後に要素を追加するように設計されました。しかし、微妙なようです2つの違い。

私が遭遇したのは、*演算子を使用して、他の配列全体の内容を現在の配列に追加できることです。ただし、#Pushのみです。

a = [1,2,3]
b = [4,5,6]

a.Push *b
=> [1,2,3,4,5,6]

代わりに#<<を使用しようとすると、ドット演算子や括弧と共に使用されるかどうかに応じて、さまざまなエラーが発生します。

なぜ#<<が#Pushと同じように機能しないのですか?実際には、一方は他方のエイリアスではありませんか?

49
RavensKrag

これらは非常に似ていますが、同一ではありません。

<< は単一の引数を受け入れ、配列の最後にプッシュします。

Push 、一方、1つ以上の引数を受け入れ、それらをすべて最後にプッシュします。

事実 <<単一のオブジェクトのみを受け入れるため、エラーが表示されます。

80
x1a4

Array#<<とArray#Pushの主な違いは

Array#<< # can be used to insert only single element in the Array

Array#Push # can be used to insert more than single element in the Array

別の重要な違いは、単一の要素を挿入する場合、

Array#<<はArray#Pushよりも高速です

ベンチマーク は、これら2つの方法のパフォーマンスを調べるのに役立ちます。詳細は here を参照してください。

10
Akshay Mohite

<<は機能せず、Pushは機能します:

  1. Pushは多くの引数を受け入れることができます(*b)。
  2. <<は単一の引数のみを受け入れます。
9
David Weiser

ここで注意すべきもう1つの重要な点は、<<も演算子です。そして、三項演算子のようないくつかの演算子よりも優先順位が低くなります。これにより、予期しない結果が生じる可能性があります。例えば:

arr1, arr2 = [], []

arr1.Push true ? 1 : 0
arr1
# => [1] 

arr2 << true ? 1 : 0
arr2
# => [true] 
7
Santhosh

Pushメソッドは、配列の末尾に項目を追加します。複数の引数を指定できます。 <<は配列の初期化に使用され、引数を1つだけ持つことができます。すでに初期化されている場合、配列の最後に要素を追加します。

0
Abhishek Singh