代码
require 'yaml'
puts YAML.load("
is_something:
values: ['yes', 'no']
").to_yaml
产生
---
is_something:
values:
- "yes"
- "no"
虽然这是一个正确的yaml,但当你有一个数组的散列时,它看起来很难看。有没有办法让to_yaml
生成yaml的内联数组版本?
选项散列可以传递给,但是如何使用它呢?
编辑0:感谢Pozsár Balázs。但是,从ruby 1.8.7 (2009-04-08 patchlevel 160)开始,选项散列并不能像宣传的那样工作。:(
irb
irb(main):001:0> require 'yaml'
=> true
irb(main):002:0> puts [[ 'Crispin', 'Glover' ]].to_yaml( :Indent => 4, :UseHeader => true, :UseVersion => true )
---
- - Crispin
- Glover
=> nil
发布于 2009-06-28 12:37:35
这个丑陋的黑客似乎做到了..。
class Array
def to_yaml_style
:inline
end
end
浏览ruby的源代码,我找不到任何我可以通过的选项来实现同样的目标。lib/yaml/constants.rb中对默认选项进行了说明。
发布于 2016-08-26 17:31:23
从Ruby1.9开始,psych
被用作默认的YAML引擎。它支持一些属性:http://ruby-doc.org/stdlib-2.1.0/libdoc/psych/rdoc/Psych/Handler/DumperOptions.html
所以对我来说,它是有效的:
irb(main):001:0> require 'yaml'
=> true
irb(main):002:0> puts [{'a'=> 'b', 'c'=> 'd'}, {'e'=> 'f', 'g'=>'h'}].to_yaml(:indentation => 4)
---
- a: b
c: d
- e: f
g: h
发布于 2014-08-13 21:46:05
这只是另一种指定输出样式的技巧,但它允许按特定对象进行自定义,而不是全局(例如,针对所有数组)。
https://gist.github.com/jirutka/31b1a61162e41d5064fc
简单的例子:
class Movie
attr_accessor :genres, :actors
# method called by psych to render YAML
def encode_with(coder)
# render array inline (flow style)
coder['genres'] = StyledYAML.inline(genres) if genres
# render in default style (block)
coder['actors'] = actors if actors
end
end
https://stackoverflow.com/questions/1054730
复制相似问题