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另一方面,接受一个或多个参数,将它们全部推到最后。

仅接受单个对象的事实<<就是您看到错误的原因。

于 2012-05-13T05:29:28.850 回答
13

这里要注意的另一个重点是,<<它也是一个运算符,它的优先级低于或高于其他运算符。这可能会导致意想不到的结果。

例如,<<具有比三元运算符更高的优先级,如下图所示:

arr1, arr2 = [], []

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

arr2 << true ? 1 : 0
arr2
# => [true] 
于 2015-04-08T15:09:07.850 回答
10

<<不起作用和起作用的原因push是:

  1. push可以接受许多参数(当你这样做时会发生这种情况*b)。
  2. <<只接受一个参数。
于 2012-05-13T05:30:46.893 回答
9

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 快

基准测试可以帮助找出这两种方法的性能,在这里找到更多。

于 2013-08-15T06:17:26.867 回答
0

push方法将一项附加到数组的末尾。它可以有多个参数。 <<用于初始化数组,只能有一个参数,如果已经初始化,则在数组末尾添加一个元素。

于 2012-05-13T06:07:12.443 回答