2016-11-18 68 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功能)。