2013-06-09 11 views
7

Ich denke, Einrückung ist wichtig in YAML.YAML Einrückung für Array in Hash

Getestet habe ich folgendes in irb:

> puts({1=>[1,2,3]}.to_yaml) 
--- 
1: 
- 1 
- 2 
- 3 
=> nil 

ich so etwas wie dies zu erwarten:

> puts({1=>[1,2,3]}.to_yaml) 
--- 
1: 
    - 1 
    - 2 
    - 3 
=> nil 

Warum nicht dort Einbuchtung für das Array ist?

Ich fand dies bei http://www.yaml.org/YAML_for_ruby.html#collections.

Der Strich in einer Sequenz zählt als Einrückung, sodass Sie innerhalb eines Mappings eine Sequenz hinzufügen können, ohne Leerzeichen als Einzug zu benötigen.

+0

Offensichtlich braucht es keine Einrückung, wenn ein Skalar auf eine Sequenz abgebildet wird. – akonsu

Antwort

3

Beide Wege sind gültig, soweit ich sagen kann:

require 'yaml' 

YAML.load(%q{--- 
1: 
- 1 
- 2 
- 3 
}) 
# => {1=>[1, 2, 3]} 

YAML.load(%q{--- 
1: 
    - 1 
    - 2 
    - 3 
}) 
# => {1=>[1, 2, 3]} 

Es ist nicht klar, warum Sie denken, es Leerzeichen vor den Bindestrichen sein sollte. Wenn Sie denken, dass dies eine Verletzung der spec ist, erläutern Sie bitte wie.

Warum gibt es keine Einrückung für das Array?

Ein Bindestrich muss vor den Bindestrichen nicht eingefügt werden, und es ist einfacher, keine hinzuzufügen.

+3

, während es keine Notwendigkeit für Leerzeichen Ich finde es besser lesbar – lfender6445

6

Es ist so können Sie tun:

1: 
- 2: 3 
    4: 5 
- 6: 7 
    8: 9 
- 10 
=> {1 => [{2 => 3, 4 => 5}, {6 => 7, 8 => 9}, 10]} 

Grundsätzlich Striche Objekte abgrenzen und Vertiefung bezeichnet den „Wert“ des Schlüssel-Wert-Paar.

Das ist das Beste, was ich tun kann; Ich habe keinen der Gründe für diesen oder jenen Aspekt der Syntax gefunden.

+0

Gut genug für mich, danke für die Antwort –