Как использовать "каждый" в объекте Openstruct?

У меня есть хеш OpenStruct:

#<OpenStruct object1={
                       "param1"=>"2", 
                       "param2"=>"1"
                     }, 
             object2={
                       "param1"=>"2", 
                       "param2"=>"1"
                     }, 
             object3={
                       "param1"=>"2", 
                       "param2"=>"1"
                     }...

Как я могу использовать each для этого?

Ответы

Ответ 1

OpenStruct имеет метод marshal_dump, который возвращает основную структуру хэша:

your_open_struct.marshal_dump.each{ |k,v| puts "#{k} => #{v}" }

Если вы используете Ruby 2.0, вы также можете использовать to_h:

your_open_struct.to_h.each{ |k,v| puts "#{k} => #{v}" }

В отличие от marshal_dump, который возвращает фактическую структуру хэша, to_h возвращает хэш со всеми ключами, преобразованными в символы для облегчения доступа.