2010-01-28 26 views
6

Theo tài liệu YAML, bạn có thể chuyển một số hash of options đến phương thức .to_yaml.Cách nhận các tùy chọn định dạng cho phương thức to_yaml hoạt động trên ruby ​​1.9.1?

Hiện tại khi tôi chuyển các tùy chọn như được đề xuất bởi tài liệu không hoạt động, hàm băm sẽ bị bỏ qua.

irb(main):001:0> require 'yaml' 
=> true 
irb(main):002:0> user = { "1" => { "name" => "john", "age" => 44 } } 
user.to_yaml 
=> "--- \n\"1\": \n name: john\n age: 44\n" 

Bây giờ, đi qua một số tùy chọn:

irb(main):014:0> user.to_yaml(:Indent => 4, :UseHeader => true, :UseVersion => true) 
=> "--- \n\"1\": \n name: john\n age: 44\n" 
irb(main):015:0> user.to_yaml(:Separator => "\n") 
=> "--- \n\"1\": \n name: john\n age: 44\n" 
irb(main):016:0> user.to_yaml(:separator => "\n") 
=> "--- \n\"1\": \n name: john\n age: 44\n" 
irb(main):017:0> RUBY_VERSION 
=> "1.9.1" 

Như bạn có thể thấy, thông qua các tùy chọn không làm việc. Chỉ các giá trị mặc định:

YAML::DEFAULTS 
=> {:Indent=>2, :UseHeader=>false, :UseVersion=>false, :Version=>"1.0", :SortKeys=>false, :AnchorFormat=>"id%03d", :ExplicitTypes=>false, :WidthType=>"absolute", :BestWidth=>80, :UseBlock=>false, :UseFold=>false, :Encoding=>:None} 

Đây có phải là lỗi đã biết không? hoặc Nó hiện đang làm việc cho bất cứ ai sử dụng Ruby 1.9.1?

+0

Tôi nhận được hành vi tương tự như bạn đang thấy. Có vẻ như điều này đã được yêu cầu trước đó mà không có độ phân giải: http://stackoverflow.com/questions/1054730/is-it-possible-to-specify-formatting-options-for-toyaml-in-ruby –

+0

Có, trong đó trường hợp họ đang sử dụng 1.8.7, tôi đã chỉ tự hỏi nếu nó hoạt động cho 1.9.1, nó có vẻ là một vấn đề mà không có một câu trả lời ngắn gọn. – jpemberthy

+0

Tôi rất muốn biết câu trả lời cho câu hỏi này. Tôi từ lâu đã từ bỏ và viết chức năng "sắp xếp yaml" của riêng tôi (cho 1.8.7). –

Trả lời

2

Tôi đã đào sâu tương đối vào nguồn C cho điều này trong quá khứ không xa. Tôi đang đăng bài chỉ để xác nhận những gì đã được nói trong các ý kiến.

Về cơ bản, không thể thực hiện được. Các tùy chọn Syck bị mất ở đâu đó trong quá trình này, trước khi chạm vào nhà văn YAML.

Điều tốt nhất bạn có thể có là to_yaml_style. Đôi khi.

Điều này tương tự đối với 1,8 và 1,9.

+0

Ok, tôi đã kết thúc viết một mô-đun nhỏ để có được nó được định dạng, không phải là tối ưu vì nó nên được sử dụng phương pháp 'to_yaml' ... nhưng ít nhất nó hoạt động. Cảm ơn. – jpemberthy

Các vấn đề liên quan