我正在研究反向波兰表示法问题。在eval
函数中,我想传递输入标记作为参考,然后遍历它并使用匹配来执行A
或B
之类的操作。但该程序产生错误:
预期参考,找到枚举
main::Token
。
我想在这里检查令牌的类型,但Rust似乎没有一种直接打印出类型的方法。这里的错误来源是什么?
pub enum Operator {
// `+`
Add,
// `-`
Sub,
// `*`
Mul,
}
pub enum Token {
Operator(Operator),
Operand(isize),
}
pub fn eval(tokens: &[Token]) -> Option<isize> {
for token in tokens {
// error here: expected reference, found enum `main::Token`
match token {
Token::Operator(ref a) => println!("do something A"),
Token::Operand(ref b) => println!("do something B"),
};
}
Some(5)
}
fn main() {
// test input
let input1 = Token::Operand(3);
let input2 = Token::Operand(2);
let sign1 = Operator::Add;
let input3 = Token::Operator(sign1);
eval(&[input1, input2, input3]);
}
我的问题是不重复Matching on a reference to an enum,因为添加ref
并未将其从类型不匹配错误中保存。