match 和模式匹配深入
C 程序员第一次看到 match,很容易把它当成更严格的 switch。
这个类比能帮你入门,但不够。C 的 switch 主要按整数值分支;如果状态背后还有数据,你还要手工从结构体或 union 里取字段。
C 程序员第一次看到 match,很容易把它当成更严格的 switch。
这个类比能帮你入门,但不够。C 的 switch 主要按整数值分支;如果状态背后还有数据,你还要手工从结构体或 union 里取字段。
C 里 enum 和 union 经常一起出现。enum 表示当前是哪种类型,union 复用同一块内存保存不同数据:
enum ValueKind {
VALUE_INT,
VALUE_FLOAT,
VALUE_TEXT,
};
struct Value {
enum ValueKind kind;
union {
int i;
float f;
const char *text;
} data;
};
这是 C 里的 tagged union。它很常见,也很有用,但正确性靠纪律:
阅读更多