【问题标题】:String interpolation in YAMLYAML 中的字符串插值
【发布时间】:2013-03-24 13:35:42
【问题描述】:

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

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

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

Home: /home
Alice: $Home/alice

所以“爱丽丝”到底是/home/alice

【问题讨论】:

标签: yaml string-interpolation template-variables


【解决方案1】:

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

Alice: ! '%{home}/Alice' 

请参阅this StackOverflow Q&A 以获得几乎完全是您的问题的详细答案。

【讨论】:

    【解决方案2】:

    你应该使用 ERB 模板。

    你可以这样写:

    Alice: <%=home%>/alice
    

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

    像这样:

    require 'erb'
    
    home = 'home'
    YAML.load(ERB.new(yaml_content).result(binding))
    

    【讨论】:

      【解决方案3】:

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

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

      希望这会有所帮助!

      编辑:由于 cmets 是正确的并且链接可能会断开,因此这里是一个简单的示例:

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

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

      使用python -m pip install dynamic_yaml 安装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
      

      【讨论】:

      • 点评来源: 嗨,虽然链接是分享知识的好方法,但如果它们将来被破坏,它们将不会真正回答问题。将回答问题的链接的基本内容添加到您的答案中。如果内容太复杂或太大而无法在此处放置,请描述所提出解决方案的总体思路。请记住始终保留指向原始解决方案网站的链接引用。见:How do I write a good answer?
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 2021-06-15
          • 2021-08-28
          • 1970-01-01
          • 2020-04-30
          • 1970-01-01
          • 1970-01-01
          • 2023-03-31
          • 2022-07-06
          • 2021-04-23
          相关资源
          最近更新 更多