我以为我可以使用{}或Hash[]声明散列,但是大括号似乎无法工作,除非我将它赋值给一个变量(参见下面)。我猜irb会混淆它是散列还是块。这是正确的,还是我不正确地声明了带有大括号的散列?
>> puts h = { :a=>1, :b=>2 }
{:a=>1, :b=>2}
>> puts { :a=>1, :b=>2 }
SyntaxError: (irb):58: syntax error, unexpected =>, expecting '}'
puts { :a=>1, :b=>2 }
^
from /usr/bin/irb:12:in `<main>'
>> puts Hash[ :a=>1, :b=>2 ]
{:a=>1, :b=>2}
>>发布于 2014-10-23 16:17:48
您可以通过添加括号来解决这个问题:
puts({ :a => 1, :b => 2 })
# {:a=>1, :b=>2}如果省略括号,Ruby将把大括号解释为块:
puts { :a => 1, :b => 2 }
# SyntaxError: unexpected ':', expecting '}'
# semantically the same as
puts do
:a => 1, :b => 2
end
# SyntaxError: unexpected =>, expecting keyword_end但是,您也可以省略两个括号,而Ruby将将其视为哈希:
puts :a => 1, :b => 2
# {:a=>1, :b=>2}
# same as
puts(:a => 1, :b => 2)
# {:a=>1, :b=>2}
# same as
puts({:a => 1, :b => 2})
# {:a=>1, :b=>2}你甚至可以用短符号来表示符号键;-)
puts a: 1, b: 2
# {:a=>1, :b=>2}发布于 2014-10-23 16:09:43
它只是需要明确的语法,例如,
irb> puts({ :a => 1, :b => 2 })
{:a=>1, :b=>2}发布于 2014-10-23 16:15:04
您的脚本{.}看起来像在传递一个代码块一样看起来像红宝石。因为puts是一种可以接受参数和/或块的方法,所以需要指定花括号中的内容是参数而不是块。尝试:
puts( { a: 1, b: 2 })https://stackoverflow.com/questions/26532409
复制相似问题