联合 (union)

联合定义了一组字段,但在任何给定时间,只能有一个字段处于活动状态。

定义联合

const Payload = union {
    int: i64,
    float: f64,
    boolean: bool,
};

初始化

var payload = Payload{ .int = 1234 };
payload = Payload{ .float = 12.34 };

标签联合 (Tagged Union)

最常见的用法是将联合与枚举结合使用,称为标签联合。这允许你在运行时知道哪个字段是活动的。

const Tag = enum { a, b, c };
const Tagged = union(Tag) {
    a: u8,
    b: f32,
    c: bool,
};

或者让编译器自动推断标签类型:

const Tagged = union(enum) {
    a: u8,
    b: f32,
    c: bool,
};

Switch on Union

可以在 switch 语句中使用标签联合来处理不同的情况。

switch (tagged_value) {
    .a => |value| std.debug.print("int: {}\n", .{value}),
    .b => |value| std.debug.print("float: {}\n", .{value}),
    .c => |value| std.debug.print("bool: {}\n", .{value}),
}

另请参阅: