18

在 Perl 中,我可以执行以下操作:

my $home = "/home";
my $alice = "$home/alice";

我可以在 YAML 中执行以下操作:

Home: /home
Alice: $Home/alice

那么《爱丽丝》/home/alice到底有效吗?

4

5 回答 5

11

不幸的是,你运气不好。要执行您想要的操作,您需要$home从视图文件(或任何地方)传入并将其插入到您的 yaml 条目中,这可能看起来像:

Alice: ! '%{home}/Alice' 

有关您的问题的详细答案,请参阅此 StackOverflow Q&A 。

于 2013-04-03T05:53:32.710 回答
11

您应该使用 ERB 模板。

你可以这样写:

Alice: <%=home%>/alice

使用时需要home先用 ERB 解析值,然后解析为 YAML。如果 home 是局部变量,则需要将局部绑定作为#result 方法的参数传入。如果你没有通过这个,将默认使用 TOP LEVEL 绑定。

像这样:

require 'erb'

home = 'home'
YAML.load(ERB.new(yaml_content).result(binding))
于 2014-12-09T10:48:45.347 回答
4

我最近也在为 Python 寻找这个,并dynamic-yaml通过 Github 上的 Awesome YAML 存储库偶然发现了这个包。

链接 Awesome YAML Github 存储库:https ://github.com/dreftymac/awesome-yaml#parsers 链接 Python 的动态 YAML:https ://github.com/childsish/dynamic-yaml

希望这可以帮助!

编辑:由于评论是正确的,链接可能会中断,这里是一个简单的例子:

如果您有一个如下所示的 YAML 文件:

house:
    street: cool_street_name
    number: 45
    street_and_number: {house.street}-{house.number}

安装 dynamic_yamlpython -m pip install dynamic_yaml以运行以下脚本。

import dynamic_yaml

with open(path_to_yaml_file, 'r') as f:
    data = dynamic_yaml.load(f)

然后你会得到:

print(data['house']['street_and_number'])
>> cool_street_name-45
于 2019-12-20T08:14:45.633 回答
2

我最终使用了,YAML::AppConfig但我承认这不是 YAML 解决方案,而是 Perl 特定的解决方案。它允许 YAML 包含$var被插值的 s。

于 2013-04-04T04:30:23.210 回答
0

使用Yglu,您可以这样编写示例:

Home: /home
Alice: !? .Home + '/alice'

或者

Home: /home
Alice: !? ('{0}/alice').format($_.Home)

免责声明:我是 Yglu 的作者。

于 2020-02-17T23:50:00.330 回答