什么是不同的'<<&#和'推'在Ruby Array中

时间:2015-04-08 07:05:04

标签: ruby arrays push

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

我的确期望["O"] 但是array[true]

现在我使用push

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

然后结果为["O"]

实际上true ? "O" : "X"返回"O"
如果同时使用["O"]<<,我的假设为push。但事实并非如此 有谁知道为什么?

1 个答案:

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