我正在尝试结合使用锚和别名,以便将值重复使用不同名称的多个容器中。
我尝试了以下代码:
FWL_GV_NANSEN: &fwl_gv_nansen
dtype: float
value: 2715.0
FWL_GV_E3_2: &fwl_gv_e32 *fwl_gv_nansen
我们的目标仅仅是让另一个变量FWL_GV_E3_2包含与FWL_GV_NANSEN相同的信息,稍后我会提到。
与Python(或其他)中的定义相同:
a = 5.0
b = a
c = b
但这会触发以下错误消息:
yaml.parser.ParserError:解析块映射时 在“ fwl_2.yml”的第7行第3列中 预期<块结尾>,但是找到了'<别名>'
是否没有办法将别名的内容分配给用于定义新锚点的变量(通过不同的变量传播初始值?
PS:也许YAML并不是最好的语言,因为使用python的变量会显得微不足道,但是我必须使用YAML
答案 0 :(得分:0)
YAML节点属性(即标记和锚点)只能出现在“真实”节点上:集合(块或流)或标量。
从生产规则中可以看到,c-ns-properties
仅可在此处使用,但别名部分也states explicitly:
请注意,别名节点不得指定任何属性[...]
如果您的YAML解析器允许您访问原始锚点/别名,或某些锚点到节点/对象的映射(例如我在Python的ruamel.yaml
软件包,用于往返),就是使用标记的标量:
FWL_GV_NANSEN: &fwl_gv_nansen
dtype: float
value: 2715.0
FWL_GV_E3_2: &fwl_gv_e32 !ref fwl_gv_nansen
!ref
对象的构造函数解析标量fwl_gv_nansen
,并带有一些 application 特定代码。通常,锚和别名事件是在作曲之前由作曲程序加载器步骤 解决的(如果这样,则不再可用信息)。