假设我的 Rust 库中的某处定义了以下枚举类型:
#[derive(Debug)]
pub enum Color {
Red,
Green,
Blue,
}
Run Code Online (Sandbox Code Playgroud)
Color::Yellow当我向枚举添加第四个变体时,这是否被视为重大更改?如果这是一个重大更改(我猜是因为声明match),有没有办法向 API 用户表明这种类型将来可能会扩展?
是的,添加枚举变体被视为重大更改。请在此处的Rust RFC 1105 - API 演变中阅读有关它的更多信息。
您可以将该#[non_exhaustive]属性添加到枚举中,以警告用户您将来可能会使用更多变体扩展枚举,因此添加新变体不会被视为重大更改:
#[non_exhaustive]
#[derive(Debug)]
pub enum Color {
Red,
Green,
Blue,
}
Run Code Online (Sandbox Code Playgroud)
这不允许导入您的枚举以非详尽地匹配它的项目。IE:
match color {
Color::Red => (),
Color::Green => (),
Color::Blue => (),
}
Run Code Online (Sandbox Code Playgroud)
抛出错误,同时
match color {
Color::Red => (),
Color::Green => (),
Color::Blue => (),
_ => (),
}
Run Code Online (Sandbox Code Playgroud)
惯于。
| 归档时间: |
|
| 查看次数: |
389 次 |
| 最近记录: |