2013-06-09 24 views
7

YAMLではインデントが重要だと思います。配列のハッシュのYAMLインデント

私はirbに次のようにテストした:

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

私は期待このような何か:

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

をなぜそこアレイのインデントではないでしょうか?

私はこれをhttp://www.yaml.org/YAML_for_ruby.html#collectionsで見つけました。

ダッシュはインデントとしてカウントされるため、インデントとして空白を必要とせずにマッピング内に シーケンスを追加できます。

+0

明らかに、スカラーをシーケンスにマッピングするときにインデントを行う必要はありません。 – akonsu

答えて

3

どちらの方法は、私の知る限り、有効です。

require 'yaml' 

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

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

あなたがハイフンの前にスペースがあるはずだと思う理由は明確ではありません。これがspecに違反していると思われる場合は、どうか説明してください。

なぜ配列のインデントがありませんか?

ハイフンの前にインデントを入れる必要はなく、追加しない方が簡単です。

+3

にお返事いただきありがとうございます。スペースは必要ありませんが、私はそれがより読みやすいと感じています。 – lfender6445

6

それはそうあなたが行うことができます。

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

は基本的には、ダッシュは、オブジェクトを区切ると、インデントは、キーと値のペアの「値」を表します。

これは私ができることです。私は、構文のこの側面またはその側面の背後にある理由のいずれかを見つけることができませんでした。

+0

私にとっては十分です。 –

関連する問題