红宝石 - 阵列#<<和Array#推的区别红宝石 - 阵列#<<和Arra

2019-05-14 01:22发布

从检查的Ruby 1.9.3文档,无论阵列#<<和Array#推被设计为实现一个附加元件到当前的阵列的端部。 然而,似乎是两者之间的细微差别。

我所遇到的一个是,*运算符可被用于整个其它数组的内容附加到当前一个,但只与#push。

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

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

尝试使用#<<不是给各种错误,这取决于它的用点操作和/或括号使用。

为什么#<<不相同的方式工作#push呢? 是一个没有真正用于其他的别名?

Answer 1:

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

<<接受一个参数,并将其推到阵列的端部。

push ,而另一方面,接受一个或多个参数,将它们推到所有的末端。

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



Answer 2:

为什么原因<<不起作用, push做的是:

  1. push可以接受许多参数(这是当你做了什么情况*b )。
  2. <<只接受一个参数。


Answer 3:

阵列#<<和Array#推之间的主要区别是

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

另一个显著不同的是,在插入单一元件的情况下,

阵列#<<比阵列#推快

标杆可以找出这两个方面的表现帮助,找到更多的在这里 。



Answer 4:

这里要注意的另一个重要的一点是, <<也是运营商。 它具有比像三元运算符的一些优先级高。 这可能会导致一些意想不到的结果。 例如:

arr1, arr2 = [], []

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

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


Answer 5:

所述push方法附加一个项目到array.It的端部可以具有多于一个的参数。 <<用于初始化数组,只能有一个参数,在数组的末尾添加一个元素是否已经被初始化。



文章来源: Ruby - Difference between Array#<< and Array#push