2016-11-18 81 views
2

我想獲取條件爲true的數組中的元素。例如,我想在數組元素是0。將借用整數與文字整數進行比較

fn main() { 
    let lim = 10; 
    let mut sieve = vec![0; lim+1]; 
    sieve[1] = 1; 
    println!("{:?}", sieve.iter() 
     .enumerate() 
     .filter(|&(_, c)| c != 0) 
     .map(|(i, _)| i) 
     .collect::<Vec<usize>>()); 
} 

所有索引但是,這是一個編譯錯誤:the trait bound '&{integer}: std::cmp::PartialEq<{integer}>' is not satisfied。當我使用c.clone() != 0它的作品。

如果我正確理解錯誤消息,Rust會抱怨說它無法將借位與具有整數的整數進行比較。我不明白爲什麼它不應該成爲可能。

+0

是改變成' * c'作品。但爲什麼我必須去掉它? –

回答

5

您正確解釋錯誤,原因是它沒有被執行。如果標準庫編寫者想要完成這項工作,他們必須實施PartialEq&i32 == i32,i32 == &i32,&mut i32 == i32,i32 == &mut i32,&i32 == &mut i32&mut i32 == &i32。然後,他們不得不這樣做的所有其他基本類型(i8i16u8u16u32i64u64f32f64char)。

這是一個lotPartialEq實現。

或者,他們可以只是要求該語言的用戶編寫*c != 0

(如果你從C++過來,瞭解事情的關鍵是,語法,借力更像指針不是引用。只有方法調用的語法有自動DEREF功能)。