2013-07-10 16 views
27

Aşağıda sağlanmış olan gibi bir karma değeri okunabilir YAML'ye dönüştürmem gerekiyor. Ben bir dize YAML::load besleyebilir gibi görünüyor, ama ben böyle bir şey haline ilk dönüştürmek gerekir düşünüyorum:Ruby Hash'i YAML'ye dönüştürün

hostname1.test.com: 
    public: 51 
    private: 10 

{"hostname1.test.com"=> 
    {"public"=>"51", "private"=>"10"}, 
"hostname2.test.com"=> 
    {"public"=>"192", "private"=>"12"} 
} 

ben etkili olsa o dizeye o dönüşümü yapmak tam olarak nasıl emin değilim.

HASH belgelerini inceledim ve to_yaml için hiçbir şey bulamadım. to_yaml için arama yaparak bulduğum, require yaml olduğunda kullanılabilir hale gelir. Ayrıca Enumerable yöntemini collect kullanmayı denedim, ancak değer boyunca yinelemem gerektiğinde kafam karıştı (başka bir karma).

"Converting hash to string in Ruby" referansını kullanmaya çalışıyorum. Benim düşüncem onu ​​YAML::load içine beslemekti ve bu istediğim YAML'ı üretecekti.

+0

Eğer Ruby'nin [YAML belgelerine] aracılığıyla okudun (http://www.ruby-doc.org/stdlib-2.0/libdoc/yaml/rdoc:

Bu

yeni açılmış bir IRB oturumdan olduğunu /YAML.html)? "[YamlForRuby sitesindeki Yaml Yemek Kitabı] (http://www.yaml.org/YAML_for_ruby.html) 'a ne dersiniz? Ayrıca, sağladığınız karma geçerli değil.Bir karma dizisi veya karma bir karma ? –

+0

Ayrıca, ne çalıştığınızı gösteren bir açıklama ile birlikte ne çalıştığınızı gösteren bir kod da sağlamanız gerekir.11 Herhangi bir çaba göstermediğiniz için –

+0

to_yaml yöntemini bulmadan önce yaptığım işi ekledim –

cevap

45

yapardım nasıl sonra iman bunun için bir karma üzerinde to_yaml yöntemi kullanabilirsiniz:

--- 
hostname1.test.com: 
    public: '51' 
    private: '10' 
hostname2.test.com: 
    public: '192' 
    private: '12' 

--- 
- hostname1.test.com: 
    public: '51' 
    private: '10' 
- hostname2.test.com: 
    public: '192' 
    private: '12' 

: çıkışı

require 'yaml' 

HASH_OF_HASHES = { 
    "hostname1.test.com"=> {"public"=>"51", "private"=>"10"}, 
    "hostname2.test.com"=> {"public"=>"192", "private"=>"12"} 
} 

ARRAY_OF_HASHES = [ 
    {"hostname1.test.com"=> {"public"=>"51", "private"=>"10"}}, 
    {"hostname2.test.com"=> {"public"=>"192", "private"=>"12"}} 
] 

puts HASH_OF_HASHES.to_yaml 
puts 
puts ARRAY_OF_HASHES.to_yaml 

Nesne sınıfında bir _yaml yöntemi. Bunu kullandım ve YAML dosyasını doğru şekilde oluşturdu.

Hayır, öyle değil.

Object.instance_methods.grep(/to_yaml/) 
=> [] 
require 'yaml' 
=> true 
Object.instance_methods.grep(/to_yaml/) 
=> [:psych_to_yaml, :to_yaml, :to_yaml_properties] 
2

Sen seni require yaml İşte

+2

Hash 'to_yaml' yöntemine sahip değil –

+5

[Nesne * değil *' to_yaml' yöntemine sahip] (http://ruby-doc.org/core-2.0/Object.html Sadece [YAML] (http://ruby-doc.org/stdlib-2.0/libdoc/yaml/rdoc/YAML.html) sınıfı var ve başka bir classe uzatıyor. gerekli olduğunda. –