为什么在Ruby中将哈希推入数组必须使用括号?

Hen*_*zia 2 ruby arrays hash

我想使用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中的括号是可选的?

dav*_*rac 6

我猜测这是因为ruby试图将哈希解析为一个块,期望代码而不是哈希键和值.这类似于:

items.push() do
  :a => "b", :b => "c"
end
Run Code Online (Sandbox Code Playgroud)

这是无效的语法.