64

Ruby 1.9.3 のドキュメントを調べると、Array#<<との両方Array#pushが、現在の配列の末尾に要素を追加することを実装するように設計されています。ただし、両者には微妙な違いがあるようです。

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

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

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

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

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

4

5 に答える 5

100

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

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

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

単一のオブジェクトしか受け入れないという事実が<<、エラーが表示される理由です。

于 2012-05-13T05:29:28.850 に答える
10

<<が機能せず、機能する理由は次のpushとおりです。

  1. pushは多くの引数を受け入れることができます (これは、 を実行したときに起こることです*b)。
  2. <<単一の引数のみを受け入れます。
于 2012-05-13T05:30:46.893 に答える
0

このpushメソッドは、配列の末尾にアイテムを追加します。複数の引数を持つことができます。 <<配列の初期化に使用され、引数を 1 つだけ持つことができます。すでに初期化されている場合は、配列の末尾に要素を追加します。

于 2012-05-13T06:07:12.443 に答える