9.12. 联合内置类型

联合内置类型表示一个对应于其成员类型之一的值。

当类型是“union”时,“type”语句(7.4节)必须存在。 它重复用于指定联合的每个成员类型。 它以一个字符串作为参数,它是一个成员类型的名称。

成员类型可以是任何内置类型或派生类型。

在生成XML编码时,根据值所属成员类型的规则对值进行编码。 在解释XML编码时,将按照每个成员类型(在“type”语句中指定的顺序)对值进行连续验证,直到找到匹配项为止。 匹配的类型将是被验证的节点的值的类型,并根据该类型的规则解释编码。

成员类型中定义的任何默认值或“units”属性均不由联合类型继承。

9.12.1. 限制

工会不能被限制。 但是,根据第9节中定义的规则,每个成员类型都可以被限制。

9.12.2. 词汇表示

联合的词汇表示是与任何一个成员类型的表示相对应的值。

9.12.3. 规范形式

联合值的规范形式与值的成员类型的规范形式相同。

9.12.4. 使用示例

以下是int32和枚举的联合:

type union {
  type int32;
  type enumeration {
    enum "unbounded";
  }
}

当成员类型是“require-instance”属性(第9.9.3节)为“true”的leafref时,必须小心。 如果这种类型的叶片引用了现有的实例,则如果目标实例被删除,叶片的值必须重新确认。 例如,具有以下定义:

list filter {
  key name;
  leaf name {
    type string;
  }
  ...
}

leaf outbound-filter {
  type union {
    type leafref {
      path "/filter/name";
    }
    type enumeration {
      enum default-filter;
    }
  }
}

假设筛选器列表中存在名称为“http”的条目,并且出站筛选器叶具有以下值:

<filter>
  <name>http</name>
</filter>
<outbound-filter>http</outbound-filter>

如果删除了筛选器条目“http”,则出站筛选器页面的值与leafref不匹配,并检查下一个成员类型。 当前值(“http”)与枚举不匹配,所以生成的配置无效。

如果联合中的第二个成员类型的类型是“string”而不是枚举类型,则当前值将会匹配,并且生成的配置将是有效的。

results matching ""

    No results matching ""