Ruby Array 中的"<<"和"push"有什么不同


array = []
array << true ? "O" : "X"

我确实期待["O"].
array [true]

现在我使用push

array.push(true ? "O" : "X")

然后结果是["O"]

实际上true ? "O" : "X"回到"O"
我的假设是["O"]是否使用<<push两者。但事实并非如此。
有人知道为什么吗?

您可以使用 gem 可视化 Ruby 解析器如何查看ruby_parser 2 个表达式。

require 'ruby_parser'
require 'pp'
pp RubyParser.new.parse 'true ? "O" : "X"'
# => s(:if, s(:true), s(:str, "O"), s(:str, "X"))

现在,根据上面的解析结果,比较一下:

pp RubyParser.new.parse '[] << true ? "O" : "X"'
# => s(:if, s(:call, s(:array), :<<, s(:true)), s(:str, "O"), s(:str, "X"))
#                    <-----------------------> look this part

然后

pp RubyParser.new.parse '[].push(true ? "O" : "X")'
# => s(:call, s(:array), :push, s(:if, s(:true), s(:str, "O"), s(:str, "X")))

相关内容

最新更新