是否可以在 ruby 中指定 to_yaml 的格式选项?
代码
require 'yaml'
puts YAML.load("
is_something:
values: ['yes', 'no']
").to_yaml
生成
---
is_something:
values:
- "yes"
- "no"
虽然这是一个正确的 yaml,但当您有数组哈希时,它看起来很丑陋。 有没有办法让我生成 yaml 的内联数组版本?
选项哈希可以传递到 < code>to_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
The code
require 'yaml'
puts YAML.load("
is_something:
values: ['yes', 'no']
").to_yaml
produces
---
is_something:
values:
- "yes"
- "no"
While this is a correct yaml, it just looks ugly when you have a hash of arrays. Is there a way for me to get to_yaml
to produce the inline array version of the yaml?
An options hash can be passed to to_yaml
but how do you use it?
Edit 0: Thanks Pozsár Balázs. But, as of ruby 1.8.7 (2009-04-08 patchlevel 160), the options hash does not work as advertised. :(
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
关于哈希选项:请参阅 http://yaml4r.sourceforge.net/doc/page/examples .htm
例如。 24:使用带有选项哈希
Ex的
to_yaml
。 25:选项哈希的可用符号About the hash options: see http://yaml4r.sourceforge.net/doc/page/examples.htm
Ex. 24: Using
to_yaml
with an options HashEx. 25: Available symbols for an options Hash
从 Ruby 1.9 开始,使用 psych 作为默认的 YAML 引擎。 它支持一些属性: http:// ruby-doc.org/stdlib-2.1.0/libdoc/psych/rdoc/Psych/Handler/DumperOptions.html
所以对我来说它有效:
Starting from Ruby 1.9
psych
is used as a default YAML engine. It supports some attributes: http://ruby-doc.org/stdlib-2.1.0/libdoc/psych/rdoc/Psych/Handler/DumperOptions.htmlSo for me it works:
这个丑陋的黑客似乎可以解决问题......
浏览 ruby 的源代码,我找不到任何可以通过的选项来实现相同的目的。 默认选项在 lib/yaml/constants.rb 中描述。
This ugly hack seems to do the trick...
Browsing through ruby's source, I can't find any options I could pass to achieve the same. Default options are described in the lib/yaml/constants.rb.
只是指定输出样式的另一种技巧,但是这个允许针对每个特定对象自定义它,而不是全局(例如对于所有数组)。
简单的例子
:
Just another hack to specify the output style, but this one allows to customize it per specific object, instead of globally (e.g. for all arrays).
https://gist.github.com/jirutka/31b1a61162e41d5064fc
Simple example:
最新版本的 Ruby 使用 Psych 模块进行 YAML 解析。 您可以传递的选项并不多,但您可以更改缩进和线宽。 查看最新的 Psych 文档< /a> 了解更多详细信息。
The latest versions of Ruby use the Psych module for YAML parsing. There aren't many options that you can pass but you can change indention and line width. Check the latest Psych documentation for more details.
直接使用Psych。
缩进没有效果:
my_yaml.to_yaml(:indentation => 2)
缩进有效:
Psych.dump(my_yaml, :indentation => 8)
Use Psych directly.
Indentation has no effect:
my_yaml.to_yaml(:indentation => 2)
Indentation works:
Psych.dump(my_yaml, :indentation => 8)