2013-06-09 11 views
7

Myślę, że wcięcie jest ważne w YAML.Wcięcie YAML dla tablicy w haszcie

I badane następujące w irb:

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

spodziewałem się czegoś takiego:

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

Dlaczego nie ma wcięcia na tablicy?

Znalazłem to pod http://www.yaml.org/YAML_for_ruby.html#collections.

Kreska w kolejności liczy się jako wgłębienie, dzięki czemu można dodawać sekwencję wewnątrz bez konieczności mapowania spacji jako wcięcia.

+0

najwyraźniej nie potrzebuje wcięcia podczas odwzorowywania skalaru na sekwencję. – akonsu

Odpowiedz

3

Oba sposoby są ważne, o ile mogę powiedzieć:

require 'yaml' 

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

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

Nie jest jasne, dlaczego uważasz, że nie powinno być spacji przed myślnikami. Jeśli uważasz, że jest to niezgodne z spec, wyjaśnij, jak to zrobić.

Dlaczego nie ma wcięć dla tablicy?

Nie ma potrzeby stosowania wcięć przed łącznikami, a prostsze jest dodawanie żadnych.

+3

, podczas gdy nie ma potrzeby używania spacji, uważam, że jest bardziej czytelny – lfender6445

6

To tak można zrobić:

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

Zasadniczo kreski wyznaczają obiekty, a wcięcie oznacza „wartość” z pary klucz-wartość.

To najlepsze, co mogę zrobić; Nie udało mi się znaleźć żadnej z przyczyn tego lub innego aspektu składni.

+0

Wystarczająco miło, dziękuję za odpowiedź –