首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >可以在拼音中指定to_yaml的格式选项吗?

可以在拼音中指定to_yaml的格式选项吗?
EN

Stack Overflow用户
提问于 2009-06-28 11:12:28
回答 4查看 27.1K关注 0票数 24

代码

代码语言:javascript
复制
require 'yaml'
puts YAML.load("
is_something:
  values: ['yes', 'no']
").to_yaml

产生

代码语言:javascript
复制
--- 
is_something: 
  values: 
  - "yes"
  - "no"

虽然这是一个正确的yaml,但当你有一个数组的散列时,它看起来很难看。有没有办法让to_yaml生成yaml的内联数组版本?

选项散列可以传递给,但是如何使用它呢?

编辑0:感谢Pozsár Balázs。但是,从ruby 1.8.7 (2009-04-08 patchlevel 160)开始,选项散列并不能像宣传的那样工作。:(

代码语言:javascript
复制
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
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-06-28 12:37:35

这个丑陋的黑客似乎做到了..。

代码语言:javascript
复制
class Array
  def to_yaml_style
    :inline
  end
end

浏览ruby的源代码,我找不到任何我可以通过的选项来实现同样的目标。lib/yaml/constants.rb中对默认选项进行了说明。

票数 6
EN

Stack Overflow用户

发布于 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

所以对我来说,它是有效的:

代码语言:javascript
复制
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
票数 8
EN

Stack Overflow用户

发布于 2014-08-13 21:46:05

这只是另一种指定输出样式的技巧,但它允许按特定对象进行自定义,而不是全局(例如,针对所有数组)。

https://gist.github.com/jirutka/31b1a61162e41d5064fc

简单的例子:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1054730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档