Ruby – Array#<<和Array#push之间的区别

通过检查Ruby 1.9.3的文档,Array#<<和Array#push都被devise为在当前数组的末尾添加一个元素。 不过,两者似乎有细微的差别。

我遇到的一个是*操作符可以用来追加整个其他数组的内容到当前的,但只能用#push。

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

尝试使用#<<而不是给出各种错误,取决于它是否与点运算符和/或括号一起使用。

为什么#“#push不能以相同的方式工作? 其中一个不是别人的别名吗?

他们非常相似,但不完全相同。

<<接受一个参数,并将其推到数组的末尾。

另一方面,推动接受一个或多个论点,把他们推到最后。

<<只接受单个对象的事实就是为什么你看到错误。

<<不工作,不push <<的原因是:

  1. push可以接受许多论点(这是什么时候你做*b )。
  2. <<只接受一个参数。

另外要注意的一点是, <<也是一个操作符。 它比三元运算符等运算符优先级低。 这可能会导致一些意想不到的结果。 例如:

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

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更快

标杆pipe理可以帮助您找出这两种方式的performance, 在这里find更多。

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