2016-12-17 3 views
0
에 비어있는 배열을 무시하려면 어떻게

내가 modified.yml내가 YAML

!include "original.yml" 
array_in_yml: [] 

I에 포함 된 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'와''.include''를 나타내는 키 - 값 쌍을 가질 수 없습니다. 매핑 ('array_in_yml : []'). 보고있는 내용을 보여주는 최소한의 작업 프로그램을 포함시켜야합니다. – Anthon

+0

'original.yml' 파일에 객체 배열이 없습니다. 최상위 레벨에는 하나의 키 - 값 쌍이있는 매핑이 있습니다. 값은 모든 요소가 하나의 키 - 값 쌍이있는 매핑 인 시퀀스입니다. ** 배열이없고 개체가 없습니다 **. – Anthon

답변

0

!include에 대한 토론은 실제 질문에서 약간 벗어난 것 같습니다. 알 수없는 방식으로 !include 줄이 original.yml의 내용으로 바뀌 었다고 가정 해 봅시다. 사전에있는 모든 키가 고유해야하기 때문에

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

이 유효 YAML하지 않습니다,하지만 당신은 두 번 키 array_in_yml를 사용 : 우리는 것이다. YAML 프로세서가이를 무시하고 첫 번째 값 (세 항목으로 구성된 시퀀스)을 array_in_yml 키에 할당하면됩니다.

이제 중요한 부분 : YAML에서 이전에 제공된 값을 수정할 방법이 없습니다. 이전에 제공된 값을 다른 값으로 대체 할 수 없습니다. 당신이하고 싶은 것은 YAML 스펙 밖에있다. 그리고 당신은 그런 대체물을 대신하는 병합 툴이 필요할 것이다.

+0

감사합니다. 방금 오버라이드 메커니즘이 yaml-cpp 주위의 래퍼 인 내부 API에 의해 제공되는 메소드라는 것을 알았습니다. – mkporkodi