2016-12-17 55 views
0
で空に配列を上書きするにはどうすればよい

は私がmodified.ymlは、私はYAML

!include "original.yml" 
array_in_yml: [] 

私にそれを含まYMLは、オブジェクト

array_in_yml: 
- start: 1 
- middle: 2 
- end: 3 

の配列とoriginal.ymlファイルを持っていると言いますmodified.ymlを読み込んだときにこの配列が空であると予想していますが、original.ymlという3つの値があるようです。配列を空にするにはどうすればよいですか?

+0

あなたは実際に 'yaml-cpp'を使用していますか?私はそれが '!include'機能をサポートしているとは思わないので、3つの値を読み込むのは驚きです。もしそうなら、問題を示す作業ソースコードを投稿してください。 –

+0

'modified.yml'は有効なYAMLファイルではありません。ファイルの最上位にスカラー文字列' 'original.yml" 'タグ付き'!include'と、マッピング( 'array_in_yml:[]')。あなたは、あなたが見ているものを示す最小限の作業プログラムを含めるべきです。 – Anthon

+0

'original.yml'ファイルにはオブジェクトの配列がありません。トップレベルには、1つのキーと値のペアを持つマッピングがあります。値はすべての要素が1つのキーと値のペアを持つマッピングであるシーケンスです。 **配列はなく、オブジェクトはありません**。 – Anthon

答えて

0

!includeに関するディスカッションは実際の質問から少し離れているようです。知られていない方法で、!includeという行がoriginal.ymlの内容に置き換えられたとしましょう。我々は持っているでしょう:辞書内のすべてのキーは一意である必要がありますので、

array_in_yml: 
- start: 1 
- middle: 2 
- end: 3 
array_in_yml: [] 

これは、有効なYAMLではありませんが、二回のキーarray_in_ymlを使用しています。あなたのYAMLプロセッサはこれを無視して、最初の値(3つのアイテムのシーケンス)をキーarray_in_ymlに割り当てます。

重要部分:以前に与えられた値を変更する方法はありません。以前に与えられた値を別の値で上書きすることはできません。あなたがしたいことは、YAML仕様の外であり、そのような置き換えを行うマージツールが必要です。

+0

考えてくれてありがとう。私は、オーバーライドメカニズムがyaml-cppのラッパーである内部APIによって提供されるメソッドであることを認識しました。 – mkporkodi

関連する問題