2016-05-26 49 views
2

我正在Rust编写一个词法分析器,并且我对Rust如何与Java/C++相比做了一些新的工作。是否可以用char和&mut char来比较char?

我有去类似的功能:

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的方式思考什么,但是我还没有看到在文档或在线其他地方这样做的好方法。

回答

7

你只需要解引用获得char值了参考:

if *next_char == '(' { 
    // ... 
} 
+0

或不太习惯用法,把文字的参考:?!?'如果next_char ==& '('' – Shepmaster

+0

@Shepmaster这一工程 – delnan

+0

哦有一个留空的IMPL为&T ==&T – delnan

1

或者,甚至更地道,与模式匹配:

match *next_char { 
    '(' => // ... 
} 

但如果你只分支上一个角色如果然后可能是一个更好的选择。