YAML 中的继承更复杂?

2024-03-06

YAML 具有继承性。我见过的最清晰的例子在这里:http://blog.101ideas.cz/posts/dry-your-yaml-files.html https://web.archive.org/web/20130213112648/http://blog.101ideas.cz/posts/dry-your-yaml-files.html

我需要更复杂的东西:我需要覆盖对象的对象的属性。这是一个例子:

database: &default
  server:
    ip: 192.168.1.5
    port: 2000
  db_name: test
  user: 
    name: root
    password: root

# database foo differs from default by only its port and user password
foo_database:
  <<: *default
  server:
    port: 2001
  db_name: foo
  user:
    password: foo_root

我想得到这个结果:

foo_database.server.ip -> 192.168.1.5
foo_database.server.port -> 2001
foo_database.db_name -> foo
foo_database.user.name -> root
foo_database.user.password -> foo_root

但如果你这样声明,你会得到这些不正确的属性(根据预期值):

foo_database.server.ip -> will be None
foo_database.user.name -> will be None

因为新的“服务器”对象只有“端口”属性,并且它会覆盖整个旧的“服务器”对象。

我如何获得我想要实现的继承?

Edit

Here is https://gist.github.com/ceremcem/4ca8d774e660c579682839620d8c2da8我的确切意图是工作代码实时脚本 http://livescript.net/:

config = 
  default: 
    ip: \192.168.1.5
    port: 2000
    name: \root 
    password: \root 
    db:
      name: \default
      location: \LA

  foo-database:~ -> @default `merge` do 
    ip: \11.11.11.11
    db:
      name: \my-foo 

  bar-database:~ -> @foo-database `merge` do 
    password: \1234 
    db:
      location: \SF

config.default 
# => {"ip":"192.168.1.5","port":2000,"name":"root","password":"root","db":{"name":"default","location":"LA"}}
config.foo-database  
# => {"ip":"11.11.11.11","port":2000,"name":"root","password":"root","db":{"name":"my-foo","location":"LA"}}
config.bar-database  
# => {"ip":"11.11.11.11","port":2000,"name":"root","password":"1234","db":{"name":"my-foo","location":"SF"}}

不幸的是,你无法获得你想要实现的那种“继承”,因为 YAML 的“继承”更像是“合并哈希”的一种形式。

在使用时扩展您的配置*default别名,你有:

foo_database:
  server:
    ip: 192.168.1.5
    port: 2000
  db_name: test
  user: 
    name: root
    password: root

如果您之后使用具有相同键的哈希值,它们将完全覆盖之前声明的哈希值,留给您(请原谅格式):

foo_database:
  server:
    ip: 192.168.1.5
    port: 2000
  db_name: test
  user: 
   name: root
   password: root  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

YAML 中的继承更复杂? 的相关文章

随机推荐

  • 在 ember.js 中实现“有条件”后退按钮

    我正在开发一个基于 ember js 版本 1 2 的移动应用程序 我试图找到最惯用的方法来实现许多移动应用程序中常见的全局菜单切换 后退按钮模式 具体来说 它是一个位于固定顶部工具栏左侧的按钮 当用户位于应用程序的主页 索引视图时 该按钮
  • 实体框架上下文中的复杂类型是什么

    现在我正在从 Pluralsight 上的视频中学习很多有关实体框架的知识 所以请原谅我的问题 它可能看起来很新 但我无法理解复杂类型是什么或为什么我需要它们 我确实知道我必须通过注释或 Fluent Api 来映射它们 如下所示 mode
  • .Net Core、便携式、标准、紧凑、UWP 和 PCL 之间的区别?

    我听说过 Net核心 Net 便携式 Net标准 Net 紧凑型 通用Windows平台 便携式类库 所有这些都向我解释为 完整 Net 的子集 允许您针对多个平台 所以我的问题是 有什么不同 如果我想编写一个可供尽可能多的受众使用的库 哪
  • 如何在 Windows 中将文件上传到 Solr?

    我需要验证文本提取在 Windows Server 2003 上安装的 Solr 上是否正常工作 我找到的将文件上传到 Solr 的所有示例都使用如下的curl curl http localhost 8983 solr update ex
  • 检查点是否位于自定义网格几何体内部

    检查点是否位于自定义 不规则 网格几何图形内部的最简单方法是什么 如果你的网格是特写的 您可以使用 THREE js 内置光线投射器 示例代码如下 const point new THREE Vector3 2 2 2 Your point
  • 在 iPhone 上合并音频文件

    我想将 caf 文件和 mp3 文件合并为 iPhone 上的 mp3 文件 或者我可以将它们转换为 aac 然后合并它们 我该怎么做 就像Kala OK一样 我想将我的声音和音乐融合在一起 您需要将两个文件解码为 LPCM 普通旧整数 将
  • PHP 脚本抓取整行

    感谢您花时间阅读本文 无论内容的质量如何 我都会感激每一个回复 我正在尝试创建一个在文本文件中搜索特定文本的 php 脚本 用户在 HTML 表单中输入特定文本 PHP 脚本应在文本文件中搜索该特定文本 HTML表单的输入字段的值为 use
  • 解析从云代码向特定用户发送推送通知

    我想从解析云代码向特定用户发送推送通知 因此 我在解析表的安装类中创建了一个用户部分 并将用户对象 ID 保存在那里 以便我可以通过 ID 定位用户并从云代码发送推送 https www dropbox com s dvedyza4bz3z
  • last-of-type 不适用于 IE11 和 Edge 中的自定义元素

    foo bar last of type background color red div class foo div
  • 使用 NHibernate 持久保存 Blob 流

    如果我有一个类声明为 public class MyPersistentClass public int ID get set public Stream MyData get set 如何使用 NHibernate 的映射将 MyData
  • 如何使用字符串按名称动态调用Python函数?

    我有一个 Python 函数调用 如下所示 import torchvision model torchvision models resnet18 pretrained configs use trained models 效果很好 如果
  • 如何在 Linux 中重新启动 IDLE Python Shell?

    在Windows的IDLE中 菜单栏上有一个Shell菜单 Shell 菜单上的项目之一是 重新启动 Shell Shell 菜单在 Linux 上的 IDLE 中不可用 当您对模块进行更改并希望在 shell 中再次运行该模块时 重新启动
  • Java注释的默认值是否被编译成字节码?

    我尝试对 Java 字节码实现几种静态分析 他们尝试计算某个方法是否具有特定属性 例如是一个工厂方法 由于这些分析很难测试 我决定编写一些 Java 代码并直接使用正确的属性注释方法 运行分析后 很容易自动检查计算的属性和注释的属性是否相同
  • 如何将 32 位 RGBA 图像转换为保留 alpha 的灰度

    我想在代码中按需将 32 位 RGBA 图像对象 最初是 32 位 PNG 转换为其 32 位灰度对应对象 我已经read https stackoverflow com questions 2265910 c convert image
  • 如何在 CodeIgniter 中测试我的 MySQL 更新查询是否成功? [复制]

    这个问题在这里已经有答案了 我有一个模型函数可以在我的 CodeIgniter 应用程序中更新用户 updates first of a user return true if successful false if not public
  • Scala Play 表单验证:一个案例类有不同的表单 - 这可能吗?

    我正在寻找一种方法 为一个案例类使用两种不同的形式 我试图用额外的构造函数来做到这一点 但失败了 看一下代码片段 case class LoginDetails password String field3 Option Int field
  • bean验证命令的默认参数?

    我目前正在尝试使用 bean 验证提供自定义验证消息 目前使用 spring mvc 3 1 1 apache bean 验证 在我的 bean 中 我指定 Size min 1 max 50 private String title 在我
  • Kafka 和 Spark 之间的 SSL

    我们正在使用 Kafka Spark Streaming 并将数据加载到 Cassandra 需要在运行kafka的节点和运行spark的节点之间实现安全层 有关如何在 kafka 和 Spark 节点之间实施 SSL 的任何指导吗 谢谢
  • PostgreSQL:重复的键值违反了 UPDATE 命令的唯一约束

    执行 UPDATE 查询时 我们收到以下错误消息 ERROR duplicate key value violates unique constraint tableA pkey DETAIL Key id 47470 already ex
  • YAML 中的继承更复杂?

    YAML 具有继承性 我见过的最清晰的例子在这里 http blog 101ideas cz posts dry your yaml files html https web archive org web 20130213112648 h