在触发器parser中将锚点和别名组合成一行会触发parserError:'Expected <block end>,but found'<alias>'

时间:2019-06-12 14:41:13

标签: yaml anchor alias

我正在尝试结合使用锚和别名,以便将值重复使用不同名称的多个容器中。

我尝试了以下代码:

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

1 个答案:

答案 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 特定代码。通常,锚和别名事件是在作曲之前由作曲程序加载器步骤 解决的(如果这样,则不再可用信息)。