Belki bu normal bir davranıştır, ama birisi bana bu konuda yardımcı olabilir: Ben çalıştığınızdaBeklenen bool, bulunan i32 operatör% kullanırken
test.filter(|x| -> bool{
true
});
çalışan bu basit testte
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){
..//
}
}
ama Bu
test.filter(|x| -> bool{
//return x % 2 ? true : false;
if x % 2 { <-- Error
return true;
} else{
return false;
}
});
Hata:
mismatched types:
expected `bool`,
found `i32` [E0308]
if value % 2 {
^~~~~~~~~
Ben arandı ve okumak, ama ikinci bağlantı oldukça Bu başarısız neden birisi bana açıklayabilir, anlıyorum.
https://doc.rust-lang.org/reference.html#arithmetic-operators
https://doc.rust-lang.org/std/ops/trait.Rem.html
Güncelleme:
Bu testle görebilirsiniz, aynı kodu değil, fakat aynı hata elde edilir:
Eh hata yok oldukça açıktır? '%' i32'yi döndürür, bool' değil. Bunun yerine bir boole ifadesine sahip olmak için '== 0' veya' == 1' ekleyin. Derleyici tanısının nasıl daha açık olabileceğinden emin değilim. –
@ VeronikaPrüssels kesinlikle haklısınız, bunun için üzgün bir soru, ama onu daha fazla test etmek zorunda olduğumu görmedim, yaptığım ilk şey belgeleri araştırmaktı. ve belki de başka şeylerden etkilenenleri iyi analiz edemiyorum http://ideone.com/LHtu8p –