我想使用Ruby版本1.8.7将哈希添加到数组中:
items = Array.new
items.push {:a => "b", :c => "d"}
Run Code Online (Sandbox Code Playgroud)
上面的语句将返回如下错误:
SyntaxError: compile error
(irb):35: syntax error, unexpected tASSOC, expecting '}'
items.push {:a => "b", :c => "d"}
^
(irb):35: syntax error, unexpected ',', expecting '}'
items.push {:a => "b", :b => "c"}
^
Run Code Online (Sandbox Code Playgroud)
好吧,我发现解决方案是将push参数包装在括号内,( )或者我可以使用<<运算符.我也知道push接受一个或多个参数并且<<只接受来自这个答案的单个参数,但令我困扰的是为什么我需要使用括号,而我们都知道Ruby中的括号是可选的?
我猜测这是因为ruby试图将哈希解析为一个块,期望代码而不是哈希键和值.这类似于:
items.push() do
:a => "b", :b => "c"
end
Run Code Online (Sandbox Code Playgroud)
这是无效的语法.