具有有效范围的 YAML 配置



我有一个 YAML 文件,其中包含我的应用程序的一些配置。现在,一些配置需要及时更改。例如:

2020年的价值是:

tax:
federal: 9
provincial: 7

但对于 2021 年,我们需要的是:

tax:
federal: 9.5
provincial: 7.5

如果我只能随时间切换 yml 文件会很容易,但 yaml 文件包含许多配置,这些配置会在不同的时间点发生变化。另外,我只分配了 1 个 yml 文件来配置我的应用程序,所以这不是一个真正的选择。

所以我的问题是,使用 YAML 表示这一点的最干净方法是什么?

我能想到的唯一方法是以下内容,但我可以看到这变得非常混乱。

tax:
federal: [20200101-20201231]9;[20210101-20211231]9.5
provincial:  [20200101-20201231]7;[20210101-20211231]7.5;

你的语法是非法的,你需要把它括在引号里,把它解析为单个标量,然后对它进行后处理。

我建议使用 YAML 的标签系统:您可以使用像!datedep这样的标签来标记值,例如:

tax:
federal: !datedep { [20200101, 20210101, 20220101]: [9, 7.5] }
provincial: !datedep { [20200101, 20210101, 20220101]: [7, 7.5] }

我为具有单个键值对的 YAML 映射提供值。关键是日期列表,建立两者之间的范围。该值是应映射到日期之间的范围的值列表。

加载 YAML 时,必须为标记!datedep提供构造函数。这如何工作取决于您的实现。构造函数应根据当前日期选择适当的值。您可以使用 YAML 定位点和别名来引用重复的日期范围,例如:

tax:
federal: !datedep { &y2021 [20200101, 20210101, 20220101]: [9, 7.5] }
provincial: !datedep { *y2021 : [7, 7.5] }

最新更新