#ruby #loops #hash
#ruby #циклы #хэш
Вопрос:
Я пытаюсь немного изучить 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
Может кто-нибудь, пожалуйста, объяснить, чем отличаются два результата (что означают квадратные скобки, кавычки, запятые, двоеточия?), и когда можно использовать один против другой? Спасибо!
Ответ №1:
Когда вы повторяете хэш, он передает пару key
, value
в качестве параметра в формате массива из двух элементов: [key, value]
. Именно по этой причине, которую вы видите ["Homer", "dad"]
в вашем первом примере, x
присваивается массив.
Второй пример тот же, но в этом случае вы присваиваете пару x
и y
. x
возвращает первый элемент массива и y
второй элемент, что в ruby называется множественным присваиванием.
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
Ответ №2:
В вашем первом примере вы перебираете каждый полный элемент хэша ( x
) и печатаете его как единственную пару ключ: значение, в результате чего получается формат в квадратных скобках.
Во втором примере вы снова повторяете каждый элемент хэша, но специально разбиваете этот элемент на ключ и значение ( x
, y
), которые подаются в puts
инструкцию, и печатаете их с вашим собственным форматированием.