24

コード

require 'yaml'
puts YAML.load("
is_something:
  values: ['yes', 'no']
").to_yaml

を生成します

--- 
is_something: 
  values: 
  - "yes"
  - "no"

これは正しいyamlですが、配列のハッシュがあると見栄えが悪くなります。to_yamlyamlのインライン配列バージョンを作成する方法はありますか?

オプションハッシュを渡すこと to_yamlができますが、どのように使用しますか?

編集0:PozsárBalázsに感謝します。ただし、ruby 1.8.7(2009-04-08パッチレベル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
4

5 に答える 5

11

ハッシュオプションについて: http: //yaml4r.sourceforge.net/doc/page/examples.htmを参照してください

元。24:to_yamlオプションで使用するハッシュ

puts [[ 'Crispin', 'Glover' ]].to_yaml( :Indent => 4, :UseHeader => true, :UseVersion => true )
# prints:
#   --- %YAML:1.0
#   -
#       - Crispin
#       - Glover

元。25:オプションハッシュに使用可能な記号

Indent:発行時に使用するデフォルトのインデント(デフォルトは2
Separator:ドキュメント間で使用するデフォルトの区切り文字(デフォルトは'---'
SortKeys:発行時にハッシュキーを並べ替えますか?(デフォルトはfalse
UseHeader:発行時にYAMLヘッダーを表示しますか?(デフォルトはfalse
UseVersion:放出時にYAMLバージョンを表示しますか?(デフォルトはfalse
AnchorFormat:発行時のアンカーIDのフォーマット文字列(デフォルトは' id%03d')
ExplicitTypes:発行時に明示的な型を使用しますか?(デフォルトはfalse
BestWidth:テキストを折りたたむときに使用する文字幅(デフォルトは80
UseFold:発行時にテキストを強制的に折りたたむ?(デフォルトはfalse
UseBlock:発行時にすべてのテキストをリテラルに強制しますか?(デフォルトはfalse
Encoding:エンコードに使用するUnicode形式(デフォルトは:Utf8; Iconvが必要)

于 2009-06-28T12:32:20.227 に答える
8

Ruby 1.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
于 2016-08-26T09:31:22.800 に答える
6

この醜いハックはトリックをするようです...

class Array
  def to_yaml_style
    :inline
  end
end

ルビーの情報源を閲覧していると、同じことを達成するために渡すことができるオプションが見つかりません。デフォルトのオプションはlib/yaml/constants.rbで説明されています。

于 2009-06-28T12:37:35.333 に答える
1

出力スタイルを指定するためのもう1つのハックですが、これにより、グローバルに(たとえば、すべての配列に対して)ではなく、特定のオブジェクトごとにカスタマイズできます。

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
于 2014-08-13T13:46:05.410 に答える
0

最新バージョンのRubyは、YAML解析にPsychモジュールを使用します。渡すことができるオプションは多くありませんが、インデントと線幅を変更できます。詳細については、最新のPsychドキュメントを確認してください。

于 2019-07-08T15:04:03.827 に答える