나는 Swagger를 사용하는 프로젝트에 가입했습니다.흔들리는 플레이스 홀더는 어떻게 작동합니까?
MYKey: &CONST_MY_KEY ""
어떻게 내가 CONST_MY_KEY
어디에서이 작품 정의합니까 않습니다 나는 그들이 Swagger.yaml
에 자리 표시의이 종류를 사용하고 참조?
나는 Swagger를 사용하는 프로젝트에 가입했습니다.흔들리는 플레이스 홀더는 어떻게 작동합니까?
MYKey: &CONST_MY_KEY ""
어떻게 내가 CONST_MY_KEY
어디에서이 작품 정의합니까 않습니다 나는 그들이 Swagger.yaml
에 자리 표시의이 종류를 사용하고 참조?
당신은 CONST_MY_KEY
어디의 &
객체 ""
에 대한 앵커로이 소개 정의하지 않습니다
다음은 https://learnxinyminutes.com/docs/yaml/에서 설명 발췌 한 것입니다. 별칭을 지정하려면 *
을 사용하여 YAML 파일의 나중 단계에서 이것을 다시 사용할 수 있습니다 : *CONST_MY_KEY
.
앵커 및 별칭에 대한 차 이유는 @ smartcaveman의 대답은 표시 등의 내용을 복제하지입니다. represent a node in multiple locations in the representation graph입니다. 이 기능없이
도 다음과 같은 간단한 파이썬 구조가 덤프 할 수 없습니다data = dict(a=1)
data['b'] = data
이 위를 덤프 경우 :
import sys
import ruamel.yaml
ruamel.yaml.round_trip_dump(data, sys.stdout)
당신이 얻을 것이다 :
&id001
a: 1
b: *id001
사용하는 언어와 YAML 파서에 따라 스칼라에 앵커를 사용하는 것은 유용하지 않을 수 있습니다. 나중에 실제로 같은 개체를 참조하는 컬렉션 (매핑, 시퀀스)을 사용하지 않고도 값을 반복해야합니다. 또 파이썬에서 더 많은 인기를 파서에 의해 스칼라의 로딩은 별도의 기관에서 수행한다 : 대부분의 (data['b']
의 값이 때문에 변경되지 않습니다
a ''
b ''
a 'hello'
b ''
참고 :
import ruamel.yaml
yaml_str = """\
a: &CONST_MY_KEY ""
b: *CONST_MY_KEY
"""
data = ruamel.yaml.round_trip_load(yaml_str)
print('a {a!r}'.format(**data))
print('b {b!r}'.format(**data))
data['a'] = 'hello'
print('a {a!r}'.format(**data))
print('b {b!r}'.format(**data))
당신에게 제공 파서) 스칼라는 참조 된 객체로 생성되지 않습니다.
원래 예와 그렇게 할 경우
import ruamel.yaml
yaml_str = """\
&id001
b: *id001
a: 1
"""
data = ruamel.yaml.round_trip_load(yaml_str)
print('a {a!r}'.format(**data))
data['b']['a'] = 2
print('a {a!r}'.format(**data))
때문에 data['a']
및 data['b']['a']
실제로 같은 객체이며, 하나를 변경하면 다른 변경됩니다.
<<: *name
의 사용은 비표준 YAML 확장입니다. &name
은 별칭이 사용되는 매핑에 키 - 값 쌍이 추가되는 매핑의 앵커가 될 것으로 예상합니다.
이것은 앵커 (anchor)로 알려진 YAML 구조체이며 스 ger거에만 국한되지 않습니다.
작성한 코드는 실제로 앵커 CONST_MY_KEY
을 빈 문자열로 정의합니다. &
-prefix는 정의중인 것을 나타냅니다. 이 앵커를 나중에 문서에서 재사용하려면 *CONST_MY_KEY
대신 *
-prefix를 사용하여 참조하십시오.
# YAML also has a handy feature called 'anchors', which let you easily duplicate
# content across your document. Both of these keys will have the same value:
anchored_content: &anchor_name This string will appear as the value of two keys.
other_anchor: *anchor_name
# Anchors can be used to duplicate/inherit properties
base: &base
name: Everyone has same name
foo: &foo
<<: *base
age: 10
bar: &bar
<<: *base
age: 20
인용 한 병합 확장은 일부 YAML 파서에서만 구현되며 YAML 표준의 일부가 아닙니다 (표준을 작성한 사람들이 정의했지만). 키에 대한 매핑과 해당 값에 대한 앵커에 동일한 이름을 사용하면 (예 : 일관되게) 관계가 있다고 사람들이 혼란스럽게 만드는 경우가 있습니다. ** 좋은 예는 항상 해당 엔터티에 대해 서로 다른 스칼라를 사용합니다. – Anthon
MYKey는 어떤가요? – fastcodejava
'MYKey'는 무엇입니까? – fastcodejava
@fastcodejava :'MYKey'는 일반적인 스칼라이며, 값 "" "'의 키 역할을합니다. 앵커 'CONST_MY_KEY'를 정의 할 필요는 없지만 여러 앵커를 정의하려면 매핑 (또는 시퀀스)을 포함 할 컬렉션이 필요합니다. – Anthon