我正在写一个Rust中的词法分析器,而且我对Rust与Java / C ++相比的处理方式还很陌生。
我的功能类似于:
fn lookup(next_char: &mut char, f: &File) {
//if or match
if next_char == '(' {
//do something
}
}
这给出了
error: the trait `core::cmp::PartialEq<char>` is not implemented for the type `&mut char` [E0277]
if next_char == '(' {
^~~~~~~~~~~~~~~~
如果它们被切换,那么它会给出不匹配的类型错误。我明白为什么它会给出这两个错误。我想知道是否有某种方法来比较这两个值。也许我没有考虑Rust的方式,但我没有在文档或其他地方看到过这样做的好方法。
答案 0 :(得分:9)
您只需取消引用即可从引用中获取char
值:
if *next_char == '(' {
// ...
}
答案 1 :(得分:1)
或者,可能更具惯用性,模式匹配:
match *next_char {
'(' => // ...
}
虽然如果只分支一个字符,if-then可能是更好的选择。