2
我想使用Ruby版本1.8.7哈希添加到一个数组:为什么在Ruby中将哈希推入数组必须使用括号?
items = Array.new
items.push {:a => "b", :c => "d"}
上述声明将返回一个错误是这样的:
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"}
^
嗯,我发现,解决的办法是将推式参数封装在括号()
中,或者我可以使用<<
运算符。我也知道push
接受一个或多个参数,并且<<
只接受来自this answer的单个参数,但是困扰我的是为什么我需要使用括号,而我们都知道Ruby中的括号是可选的?
奇怪的是,'items.push:a =>“b”,:c =>“d”'正如预期的那样工作...... –
@padde这是因为大括号'{}'丢失了,所以ruby不会使将其解析为块的错误。相反,它会以方法调用'push(:a =>“b”,:c =>“d”)'正确解析。原来的问题是因为你有一个模棱两可的情况,ruby编译器需要“猜测”你的含义(块或方法参数)。因为电脑不擅长阅读你的想法,所以它会抛出一个错误。 – Casper
很好的解释,感谢启发。 :) –