Rust中能否使用if not语法匹配枚举非指定变体?
问题解答
Rust 不支持if not let形式的写法,目前稳定版本仅提供了正向模式匹配的if let语法糖,没有对应的反向匹配关键字语法,你给出的测试代码无法通过编译。
如果要严格基于枚举匹配机制实现「判断枚举实例不属于某一指定变体」的逻辑,可以使用以下两种原生支持的写法:
- 直接使用
if let搭配else分支,留空匹配到目标变体的分支即可,逻辑完全走原生模式匹配流程:
pub enum Letters{ A, B, C, D, E, F } fn main() { let letter = Letters::A; if let Letters::A = letter { // 匹配到变体A时无需执行逻辑 } else { println!("letter is not a"); } }
- 如果觉得空分支写法冗余,可以使用标准库内置的
matches!宏对匹配结果取反,该宏本质是对match模式匹配的封装,返回布尔值的匹配结果,没有脱离枚举匹配的实现要求:
pub enum Letters{ A, B, C, D, E, F } fn main() { let letter = Letters::A; if !matches!(letter, Letters::A) { println!("letter is not a"); } }
内容的提问来源于stack exchange,提问作者Poperton
相关产品推荐
相关产品推荐

