Ruby: чтение массивов хэшей от YAML - PullRequest
3 голосов
/ 22 февраля 2012

У меня в папке YAML два папы, но выходит только одна семья.Что случилось с Сэмом?Как я могу получить оба?

## dads.rb
require 'yaml'
require 'pp'

dad=[]

dad[0] = {:name => "Joe", :kids => ["Mary", "John"]}
dad[1] = {:name => "Sam", :kids => ["Sam Jr", "Samantha", "Samizdat"]}

open('dads.yml' , 'w') do |f|
    dad.each do |d|
        f.write YAML::dump(d)
    end
end

family = []
open('dads.yml') do |f|
    family << YAML::load(f.read)
end

pp fams

Ответы [ 2 ]

7 голосов
/ 22 февраля 2012

Вы выгружаете несколько документов YAML, но читаете только один. Вместо этого вы можете просто сбросить и прочитать весь массив:

require 'yaml'

dads = []
dads << {:name => "Joe", :kids => ["Mary", "John"]}
dads << {:name => "Sam", :kids => ["Sam Jr", "Samantha", "Samizdat"]}

open('dads.yml', 'w') { |f| YAML::dump(dads, f) }

family = YAML::load(File.read('dads.yml'))

p family
2 голосов
/ 22 февраля 2012

Ваш код в настоящее время создает отдельные «документы» в выходных данных YAML.По умолчанию YAML::load будет просто читать в первом документе.Ответ Никласа, безусловно, таков, как и вам, но если вам абсолютно необходимо иметь дело с несколькими документами, вы можете использовать метод load_documents:

family = YAML.load_documents(File.read("dads.yml"))
# => [{:name=>"Joe", :kids=>["Mary", "John"]}, {:name=>"Sam", :kids=>["Sam Jr", "Samantha", "Samizdat"]}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...