散列的这个定义如何工作?

时间:2014-10-07 17:04:29

标签: ruby hash syntax

我找到了带有哈希分配的代码,如下所示:

@defeat = {r: :s, p: :r, s: :p}
# => {:r=>:s, :p=>:r, :s=>:p} 

为什么将此哈希的键生成为符号?这是一个简短的做法吗?

defeat[:r] = :s
defeat[:p] = :r
defeat[:s] = :p

这种哈希风格有名字吗?

2 个答案:

答案 0 :(得分:2)

A Hash可以使用其隐式形式轻松创建:

grades = { "Jane Doe" => 10, "Jim Doe" => 6 }

当您的键始终是符号时,哈希允许使用其他语法形式。而不是

options = { :font_size => 10, :font_family => "Arial" }

你可以把它写成:

options = { font_size: 10, font_family: "Arial" }

现在,在您的示例@defeat = {r: :s, p: :r, s: :p}中,所有 键都是符号 。这就是为什么您的示例Hash是一个有效的构造,它是从 1.9 引入的。

答案 1 :(得分:1)

当您使用散列样式{key:value}时,您实际上是在声明键的符号。像Arup的例子一样,{:key => value}与隐式表单是一回事。所以你随时使用:而不是=>在哈希中,您将创建一个符号作为键。

在您的示例中,您要为密钥和值创建符号。

{key: :value } # both are symbols