Может быть, это нормальное поведение, но кто-то может помочь мне с этим:Ожидаемое BOOL, найдено i32 при использовании оператора%
trait Flujo<T: std::clone::Clone> {
fn filter<F: Fn(T)->bool>(&self, prot: F);
}
impl<T: std::clone::Clone> Flujo<T> for Test<T> {
fn filter<F: Fn(T)->bool>(&self, prot: F){
..//
}
}
в этом простом тесте работает
test.filter(|x| -> bool{
true
});
, но когда я пытаюсь это
test.filter(|x| -> bool{
//return x % 2 ? true : false;
if x % 2 { <-- Error
return true;
} else{
return false;
}
});
Ошибка:
mismatched types:
expected `bool`,
found `i32` [E0308]
if value % 2 {
^~~~~~~~~
Я искал и читал, но вторая ссылка не совсем понимаю, кто-то может мне объяснить, почему это не удается.
https://doc.rust-lang.org/reference.html#arithmetic-operators
https://doc.rust-lang.org/std/ops/trait.Rem.html
Обновление:
Вы можете видеть с этим тестом, это не тот же самый код, но получается та же ошибка:
Ну ошибка довольно ясно, нет? '%' возвращает 'i32', а не' bool'. Просто добавьте '== 0' или' == 1' вместо булевого выражения? Не уверен, что диагностика компилятора может быть более простой lol –
@ VeronikaPrüssels у вас абсолютно прав, это глупый вопрос, извините за это, но не видел его. Мне пришлось бы тестироваться больше, первое, что я сделал, - это поиск документации и и я плохо анализирую, возможно, под влиянием других вещей. http://ideone.com/LHtu8p –