2016-05-26 5 views
2

Я пишу lexer в Rust, и я совершенно новичок в том, как Rust делает что-то по сравнению с Java/C++.Можно ли сравнить символ с символом 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 == '(' { 
     ^~~~~~~~~~~~~~~~ 

Если они включены, то это дает несоответствие типов ошибок. Я понимаю, почему он дает эти две ошибки. Мне было интересно, есть ли способ сравнить два значения. Возможно, я не думаю о способе ржавчины или что-то в этом роде, но я не видел хорошего способа сделать это в документации или в другом месте в Интернете.

ответ

7

Вы просто должны разыменования, чтобы получить значение char из ссылки:

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

Или, что менее идиоматический, возьмите справку о буквальном:?!?. 'Если next_char == & '('' – Shepmaster

+0

@Shepmaster Это работает – delnan

+0

О есть Подавляется осущий для & T == & T – delnan

1

Или, может быть, даже более идиоматическим с сопоставлением с образцом:

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

хотя, если вы разветвляетесь на только один символ if-then, вероятно, лучший выбор.

Смежные вопросы