문제

코드

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

생산합니다

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

이것은 올바른 YAML이지만 배열 해시가있을 때 추악 해 보입니다. 내가 얻는 방법이 있습니까? to_yaml Yaml의 인라인 배열 버전을 생성하려면?

옵션 해시를 전달할 수 있습니다 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
도움이 되었습니까?

해결책 2

이 못생긴 해킹은 트릭을하는 것 같습니다 ...

class Array
  def to_yaml_style
    :inline
  end
end

루비의 소스를 탐색하면서 동일한 달성을 위해 전달할 수있는 옵션을 찾을 수 없습니다. 기본 옵션은 다음에 설명되어 있습니다 lib/yaml/constants.rb.

다른 팁

해시 옵션에 대해 : 참조 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: 인코딩 할 유니 코드 형식 (기본값으로 :Utf8; ICONV 필요)

루비에서 시작하여 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

출력 스타일을 지정하기위한 또 다른 해킹만으로도 전체적으로 (예 : 모든 배열에 대한) 대신 특정 객체 당 사용자 정의 할 수 있습니다.

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

Simple example:

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

루비의 최신 버전은 YAML 파싱에 Psych Module을 사용합니다. 통과 할 수있는 옵션은 많지 않지만 들리와 선 너비를 변경할 수 있습니다. 최신 정보를 확인하십시오 정신 문서 자세한 사항은.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top