Ruby имеет единый интерфейс итерации.Все коллекции в Ruby имеют метод с именем each
, который позволяет выполнять итерацию по каждому элементу коллекции.Обратите внимание, однако, что явная итерация является запахом кода.В основном вы должны использовать итераторы более высокого уровня, такие как map
, reduce
, select
, find
, reject
и т. Д.
В этом конкретном случае, когда коллекция представляет собой Hash
,каждый элемент, который передается вашему блоку, представляет собой двухэлементный массив, состоящий из ключа и значения:
print hsh.reduce('') {|s, el|
s << "The key is #{el.first} and the value is #{el.last}.\n"
}
Благодаря деструктурирующему связыванию Руби вы можете просто связать два элемента массива сдве переменные в вашем блоке, и вам не нужно будет постоянно разбирать массив:
print hsh.reduce('') {|s, (k, v)|
s << "The key is #{k} and the value is #{v}.\n"
}