array = []
array << true ? "O" : "X"
我的确期望["O"]
但是array
是[true]
现在我使用push
array.push(true ? "O" : "X")
然后结果为["O"]
实际上true ? "O" : "X"
返回"O"
如果同时使用["O"]
和<<
,我的假设为push
。但事实并非如此
有谁知道为什么?
答案 0 :(得分:1)
您可以使用ruby_parser gem可视化Ruby解析器查看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")))