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")))