联合 (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}),
}
另请参阅: