Rust中如何匹配Atom枚举的任意Base/Not变体参数?
解决方法
首先,你需要在模式匹配中绑定枚举变体里的变量,直接写空的Atom::Base()会因缺少内部值报错。以下是具体实现:
假设你的类型定义为(Rust语法):
type Variable = char; enum Atom { Base(Variable), Not(Variable), } type Clause = Vec<Atom>; type Formula = Vec<Clause>;
实现find_propogatable函数
遍历公式中的子句,找到长度为1的子句后,通过模式匹配提取变量和对应的布尔值:
fn find_propogatable(formula: &Formula) -> Option<(Variable, bool)> { for clause in formula { if clause.len() == 1 { let atom = &clause[0]; return match atom { Atom::Base(var) => Some((*var, true)), Atom::Not(var) => Some((*var, false)), }; } } None }
关键说明
- 匹配
Atom::Base(var)时,var会绑定到变体内部的Variable值,以此提取具体变量 - 若使用不可变引用(如函数参数
&Formula),因Variable是char(实现了Copy),直接用*var解引用即可获取所有权 - 遍历结束后若未找到长度为1的子句,返回
None表示无可用传播的原子
内容的提问来源于stack exchange,提问作者chen
相关产品推荐
相关产品推荐

