为什么不能直接打印哈希。
p {:First=>1, :Second=>2}
语法错误,意外=>,期待'}'
但可以将其保存到变量然后打印该变量吗?
my_hash = {:First=>1, :Second=>2}
p my_hash
{:First => 1,:Second => 2}
答案 0 :(得分:1)
这似乎是因为Ruby感到困惑,并认为你将一个块传递给p
方法。
p {:First=>1, :Second=>2}
SyntaxError: unexpected =>, expecting '}'
正如您从错误中看到的那样,它期待}
您的第一个键的哈希火箭。正如您已经发现的那样,您可以将其设置为变量并且它可以正常工作。但是,如果使用括号,也可以将散列传递给p
方法,而不将其设置为变量,因为p
,puts
和print
也只是方法。这是有效的,因为将块传递给Ruby中的方法需要它在括号之外,然后减少你想要做的事情的模糊性。
p({:First=>1, :Second=>2})
{:First=>1, :Second=>2}
#=> {:First=>1, :Second=>2}
正如tadman在评论中所指出的那样,你也可以省略括号和花括号,因为Ruby知道作为参数传递给方法的键/值对等同于传递哈希并且不会被误解为一个街区。
p :First => 1, :Second => 2
{:First=>1, :Second=>2}
#=> {:First=>1, :Second=>2}