从检查的Ruby 1.9.3文档,无论阵列#<<和Array#推被设计为实现一个附加元件到当前的阵列的端部。 然而,似乎是两者之间的细微差别。
我所遇到的一个是,*运算符可被用于整个其它数组的内容附加到当前一个,但只与#push。
a = [1,2,3]
b = [4,5,6]
a.push *b
=> [1,2,3,4,5,6]
尝试使用#<<不是给各种错误,这取决于它的用点操作和/或括号使用。
为什么#<<不相同的方式工作#push呢? 是一个没有真正用于其他的别名?
从检查的Ruby 1.9.3文档,无论阵列#<<和Array#推被设计为实现一个附加元件到当前的阵列的端部。 然而,似乎是两者之间的细微差别。
我所遇到的一个是,*运算符可被用于整个其它数组的内容附加到当前一个,但只与#push。
a = [1,2,3]
b = [4,5,6]
a.push *b
=> [1,2,3,4,5,6]
尝试使用#<<不是给各种错误,这取决于它的用点操作和/或括号使用。
为什么#<<不相同的方式工作#push呢? 是一个没有真正用于其他的别名?
他们都非常相似,但不完全相同。
<<
接受一个参数,并将其推到阵列的端部。
push
,而另一方面,接受一个或多个参数,将它们推到所有的末端。
这一事实<<
只接受一个对象就是为什么你看到的错误。
为什么原因<<
不起作用, push
做的是:
push
可以接受许多参数(这是当你做了什么情况*b
)。 <<
只接受一个参数。 阵列#<<和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
另一个显著不同的是,在插入单一元件的情况下,
阵列#<<比阵列#推快
标杆可以找出这两个方面的表现帮助,找到更多的在这里 。
这里要注意的另一个重要的一点是, <<
也是运营商。 它具有比像三元运算符的一些优先级高。 这可能会导致一些意想不到的结果。 例如:
arr1, arr2 = [], []
arr1.push true ? 1 : 0
arr1
# => [1]
arr2 << true ? 1 : 0
arr2
# => [true]
所述push
方法附加一个项目到array.It的端部可以具有多于一个的参数。 <<
用于初始化数组,只能有一个参数,在数组的末尾添加一个元素是否已经被初始化。