我正在努力学习一点Ruby。有人可以向我解释这两个例子之间的区别吗?
说我有哈希:
family = { "Homer" => "dad",
"Marge" => "mom",
"Lisa" => "sister",
"Maggie" => "sister",
"Abe" => "grandpa",
"Santa's Little Helper" => "dog"
}
如果我这样迭代:
family.each { |x| puts "#{x}" }
我明白了:
["Homer", "dad"]
["Marge", "mom"]
["Lisa", "sister"]
["Maggie", "sister"]
["Abe", "grandpa"]
["Santa's Little Helper", "dog"]
当我这样迭代时:
family.each { |x, y| puts "#{x}: #{y}" }
我明白了:
Homer: dad
Marge: mom
Lisa: sister
Maggie: sister
Abe: grandpa
Santa's Little Helper: dog
有人可以解释两个结果有何不同(方括号,引号,逗号,冒号是什么意思?),以及何时可以使用一个与另一个?谢谢!
答案 0 :(得分:1)
当您迭代哈希时,它会将key
,value
对作为参数传递,格式为两个元素的数组:[key, value]
。这就是您在第一个示例中看到["Homer", "dad"]
的原因,x
被分配了数组。
第二个示例是相同的,但在这种情况下,您要将对分配给x
和y
。 x
获取数组的第一个元素,y
获取第二个元素,在ruby中称为multiple assignment。
2.2.2 :001 > x = {a: 1}.first
=> [:a, 1]
2.2.2 :002 > x
=> [:a, 1]
2.2.2 :003 > x,y ={a: 1}.first
=> [:a, 1]
2.2.2 :004 > x
=> :a
2.2.2 :005 > y
=> 1
答案 1 :(得分:0)
在您的第一个示例中,您将遍历哈希的每个完整元素(x
),并将其打印为单个键:值对,从而产生括号格式。
在第二个示例中,您再次迭代哈希中的每个元素,但专门将该元素拆分为键和值(x
,y
)被输入{ {1}}语句,并使用您自己的格式打印它们。