通过检查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的工作方式不一样吗?一个人实际上不是另一个的别名吗?
答案 0 :(得分:75)
答案 1 :(得分:9)
<<
不起作用且push
的原因是:
push
可以接受许多参数(这是*b
时会发生的事情。)<<
只接受一个参数。答案 2 :(得分:9)
Array#&lt;&lt;&lt;&lt;&lt;&lt;和数组#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
另一个重要区别是, 在插入单个元素的情况下,
阵列#&LT;&LT;比Array#push
更快Benchmarking可以帮助您找到这两种方式的效果,找到更多here。
答案 3 :(得分:7)
此处需要注意的另一个重点是<<
也是一个运营商。并且它的优先级低于三元运算符等一些运算符。这可能会导致一些意想不到的结果。例如:
arr1, arr2 = [], []
arr1.push true ? 1 : 0
arr1
# => [1]
arr2 << true ? 1 : 0
arr2
# => [true]
答案 4 :(得分:0)
push
方法将一个项追加到数组的末尾。它可以有多个参数。
<<
用于初始化数组,并且只能有一个参数,如果已经初始化,则在数组末尾添加一个元素。