Ruby - Array#<< 和 Array#push 之间的区别
Posted
技术标签:
【中文标题】Ruby - Array#<< 和 Array#push 之间的区别【英文标题】:Ruby - Difference between Array#<< and Array#push 【发布时间】:2012-05-21 02:56:46 【问题描述】:通过查看 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
的工作方式不同?一个实际上不是另一个的别名吗?
【问题讨论】:
比较这个在python中追加和扩展***.com/questions/252703 【参考方案1】:它们非常相似,但并不完全相同。
<<
接受单个参数,并将其推送到数组的末尾。
另一方面,push
接受一个或多个参数,将它们全部推到最后。
<<
仅接受单个对象这一事实就是您看到错误的原因。
【讨论】:
要对此进行扩展,您可以使用 += 简写 'push' 2 个数组。使用 @Isotope - 这会创建额外的对象,因此除非您真的不想修改第一个数组,否则应将其视为反模式。 我相信当前版本的 Ruby 确实允许 " 【参考方案2】:这里要注意的另一个重点是<<
也是一个运算符,它的优先级低于或高于其他运算符。这可能会导致意想不到的结果。
例如,<<
的优先级高于三元运算符,如下所示:
arr1, arr2 = [], []
arr1.push true ? 1 : 0
arr1
# => [1]
arr2 << true ? 1 : 0
arr2
# => [true]
【讨论】:
【参考方案3】:<<
不起作用而push
起作用的原因是:
push
可以接受许多参数(当您执行 *b
时会发生这种情况)。
<<
只接受一个参数。
【讨论】:
【参考方案4】: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
另一个显着的区别是, 在插入单个元素的情况下,
Array#
Benchmarking可以帮助了解这两种方式的性能,查找更多here。
【讨论】:
【参考方案5】:push
方法将一项附加到数组的末尾。它可以有多个参数。
<<
用于初始化数组,只能有一个参数,如果已经初始化,则在数组末尾添加一个元素。
【讨论】:
以上是关于Ruby - Array#<< 和 Array#push 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
ruby hash value array append new element