我想在条件为真的数组中获取元素.例如.我想数组元素为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>>()
);
}
Run Code Online (Sandbox Code Playgroud)
但这是一个编译错误:
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}`
Run Code Online (Sandbox Code Playgroud)
当我使用c.clone() != 0它工作.
如果我正确理解错误消息,Rust会抱怨它无法将借位与带整数的整数进行比较.我不明白为什么不应该这样.
Seb*_*edl 12
您正确解释错误,原因是它没有实现.如果标准库作家要完成这项工作,他们不得不执行PartialEq的&i32 == i32,i32 == &i32,&mut i32 == i32,i32 == &mut i32,&i32 == &mut i32和&mut i32 == &i32.然后,他们不得不这样做的所有其他基本类型(i8,i16,u8,u16,u32,i64,u64,f32,f64,和char).
这是一个很大的PartialEq实现.
或者他们可以只是要求语言的用户写*c != 0.
(如果你来自C++,要理解的关键是在语法上,借用更像是指针而不是引用.只有方法调用语法才具有自动deref功能.)
| 归档时间: |
|
| 查看次数: |
3239 次 |
| 最近记录: |