为什么不能直接在Ruby中打印哈希?

时间:2016-06-04 10:39:23

标签: ruby hash

为什么不能直接打印哈希。

p {:First=>1, :Second=>2}
  

语法错误,意外=>,期待'}'

但可以将其保存到变量然后打印该变量吗?

my_hash = {:First=>1, :Second=>2}
p my_hash
  

{:First => 1,:Second => 2}

1 个答案:

答案 0 :(得分:1)

这似乎是因为Ruby感到困惑,并认为你将一个块传递给p方法。

p {:First=>1, :Second=>2}
SyntaxError: unexpected =>, expecting '}'

正如您从错误中看到的那样,它期待}您的第一个键的哈希火箭。正如您已经发现的那样,您可以将其设置为变量并且它可以正常工作。但是,如果使用括号,也可以将散列传递给p方法,而不将其设置为变量,因为pputsprint也只是方法。这是有效的,因为将块传递给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}
相关问题