通过查看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]

try 使用#<<会产生各种错误,这取决于它是否与点运算符和/或括号一起使用.

为什么#<<#push不一样?一个不是另一个的别名吗?

推荐答案

它们非常相似,但并不完全相同.

<<接受单个参数,并将其推送到数组的末尾.

另一方面,push接受一个或多个论点,将它们全部推到最后.

事实上,<<只接受一个对象,这就是你看到错误的原因.

Ruby相关问答推荐

如何在 Ruby 中反转数字的字节顺序

Homebrew 的 ruby​​ 和Homebrew Ruby有什么区别?

有没有更好的方法来加入剩余不变的子列表?

.nil?、.blank? 之间的区别?和.empty?

有人可以解释 Ruby 在块中使用管道字符吗?

Ruby |= 赋值运算符

如何将哈希保存到 CSV

确定字符串数组是否包含ruby中的某个子字符串

Ruby 模块 - 包括 do 结束块

如何在 Ruby 中临时重定向标准错误?

如何删除字符串中的重复空格?

理解 Ruby 中的私有方法

在 Ruby 中取消定义变量

无法将 RVM 安装的 Ruby 与 sudo 一起使用

删除/取消定义类方法

跳过 Enumerable#collect 中的迭代

Ruby 中的=~运算符是什么?

正则表达式,如何匹配多行?

为什么在 ruby​​ 中动态创建大量符号不是一个好主意(对于 2.2 之前的版本)?

要散列的散列数组