首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在同一个YAML文件中引用来自其他地方的YAML“设置”?

如何在同一个YAML文件中引用来自其他地方的YAML“设置”?
EN

Stack Overflow用户
提问于 2010-01-14 19:01:42
回答 6查看 144.6K关注 0票数 175

我有以下YAML:

代码语言:javascript
复制
paths:
  patha: /path/to/root/a
  pathb: /path/to/root/b
  pathc: /path/to/root/c

我如何通过从三个路径中删除/path/to/root/,并将其作为自己的设置来“标准化”它,如下所示:

代码语言:javascript
复制
paths:
  root: /path/to/root/
  patha: *root* + a
  pathb: *root* + b
  pathc: *root* + c

显然这是无效的,我只是编造出来的。真正的语法是什么?这是可以做到的吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-01-14 19:32:41

我认为这是不可能的。你可以重用"node“,但不能是它的一部分。

代码语言:javascript
复制
bill-to: &id001
    given  : Chris
    family : Dumars
ship-to: *id001

这是完全有效的YAML,字段givenfamilyship-to块中被重用。您可以以同样的方式重用标量节点,但是您无法更改其内部内容,并从YAML内部将路径的最后一部分添加到该节点。

如果重复如此困扰您,我建议让您的应用程序意识到root属性,并将其添加到每个看起来相对而不是绝对的路径中。

票数 165
EN

Stack Overflow用户

发布于 2014-04-22 14:52:51

是的,使用自定义标签。在Python语言中的示例中,使用!join标记连接数组中的字符串:

代码语言:javascript
复制
import yaml

## define custom tag handler
def join(loader, node):
    seq = loader.construct_sequence(node)
    return ''.join([str(i) for i in seq])

## register the tag handler
yaml.add_constructor('!join', join)

## using your sample data
yaml.load("""
paths:
    root: &BASE /path/to/root/
    patha: !join [*BASE, a]
    pathb: !join [*BASE, b]
    pathc: !join [*BASE, c]
""")

这会导致:

代码语言:javascript
复制
{
    'paths': {
        'patha': '/path/to/root/a',
        'pathb': '/path/to/root/b',
        'pathc': '/path/to/root/c',
        'root': '/path/to/root/'
     }
}

!join的参数数组可以有任意数量的任意数据类型的元素,只要它们可以转换为字符串,因此!join [*a, "/", *b, "/", *c]的作用正如您所期望的那样。

票数 92
EN

Stack Overflow用户

发布于 2014-11-01 22:28:46

看待这个问题的另一种方法是简单地使用另一个字段。

代码语言:javascript
复制
paths:
  root_path: &root
     val: /path/to/root/
  patha: &a
    root_path: *root
    rel_path: a
  pathb: &b
    root_path: *root
    rel_path: b
  pathc: &c
    root_path: *root
    rel_path: c
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2063616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档