2016-05-26 48 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 { 
    '(' => // ... 
} 

但如果你只分支上一個角色如果然後可能是一個更好的選擇。