【发布时间】:2016-11-18 12:24:41
【问题描述】:
我想获取条件为真的数组中的元素。例如。我想要数组元素为 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>>()
);
}
但这是一个编译错误:
error[E0277]: can't compare `&{integer}` with `{integer}`
--> src/main.rs:10:33
|
10 | .filter(|&(_, c)| c != 0)
| ^^ no implementation for `&{integer} == {integer}`
|
= help: the trait `std::cmp::PartialEq<{integer}>` is not implemented for `&{integer}`
当我使用 c.clone() != 0 时,它可以工作。
如果我正确理解错误消息,Rust 会抱怨它无法将借用与整数与整数进行比较。我不明白为什么不可能。
【问题讨论】:
-
是的,更改为
*c有效。但是为什么我必须取消它呢?