具有特定于案例值的 YAML 可重用变量

Posted

技术标签:

【中文标题】具有特定于案例值的 YAML 可重用变量【英文标题】:YAML reusable variables with case-specific values 【发布时间】:2015-09-03 11:40:33 【问题描述】:

.yml 配置中是否可以在根据特定情况设置的变量中具有动态属性。例如:

MY_VAR: &MY_VAR
  keys:
   key2: blahblahblah
   key3: blahblahblah  # only apply this for section2, not section1

section1: 
 var: *MY_VAR

section2:  # this case needs key3 set, otherwise everything else is the same 
 var: *MY_VAR

【问题讨论】:

我对齐key1key2 假设有一个类型。因为你的例子是不正确的 YAML。 另见:***.com/questions/41620674/use-placeholders-in-yaml 另见: ***.com/questions/15777987/… 另见: ***.com/questions/37299882/… 【参考方案1】:

YAML 的锚点 (&MY_VAR) 和引用 (*MY_VAR) 在规范中是为了防止重复,同时也允许对层次结构中多次出现的对象进行序列化,并允许对它们进行反序列化,以便它们再次指向内存中的相同结构。

这不是带有参数和/或条件的字符串级宏工具。在您的示例中,如果您设置 MY_VAR->key1,您还会更改 section1->var->key1 的值

当然,应用程序可以解释它加载的值(例如,在为映射中的键形成标量的复杂字符串上),但 YAML 规范中没有这种功能。这必须(并且可以)在应用程序级别完成。

【讨论】:

我知道 section1.var 映射到 MY_VAR & 如果 MY_VAR 发生变化,它会发生变化。我看到了一个 ruby​​ 示例,它看起来可以更新共享变量中的属性,每个案例 (gist.github.com/bowsersenior/979804)。想知道这是否可以作为 yml 功能或使用 nodejs。 @trace 如果您留在 YAML 中,则不会。读取 YAML 文件的应用程序需要执行此操作。我已经通过修补我的 ruamel.yaml 解析器(python)来做到这一点,但它仍然是加载解析器的程序。尽管它对程序的其余部分看起来是透明的,但它不是 YAML 的一个特性,也不是可移植的。

以上是关于具有特定于案例值的 YAML 可重用变量的主要内容,如果未能解决你的问题,请参考以下文章

合并YAML中的可重用块(Symfony框架)

Vue 3 可重用错误处理和 handleSubmit 在可重用“useForm”函数中使用组合 api

Gatsby 具有自己查询的可重用组件

重用 VBO 进行硬件实例化

具有委托方法的可重用 UIPickerView

Swift 中具有/不同单元格类型的可重用数据源