【发布时间】:2019-08-02 07:43:12
【问题描述】:
所以,我有以下代码在向量中成功执行过滤:
let mut v1 : Vec<i32> = vec!(1,2,3);
let v2 : Vec<&mut i32> = v1.iter_mut().filter(|x| {**x == 2}).collect();
println!("{:?}", v2);
由于过滤函数中谓词的类型签名是
FnMut(&Self::Item) -> bool,我假设里面的突变
关闭将起作用:
let mut v1 : Vec<i32> = vec!(1,2,3);
let v2 : Vec<&mut i32> = v1.iter_mut().filter(|x| {**x = 3; **x == 2}).collect();
println!("{:?}", v2);
但是上面的代码会导致编译错误。如何解决?笔记 我正在玩 rust 以获得更好的理解,所以 abpve 示例没有意义(通常,没有人会尝试变异 过滤器内的东西)。
【问题讨论】:
-
没有人会尝试改变过滤器内的东西:所以这是不允许的。也许像
.map(|x| *x = 3).filter(|x| *x == 2)这样的东西? -
@rodrigo 我试图理解为什么不允许这样做。我虽然你可以用
FnMut做突变。 -
@Stargateur 但我可以使用
map进行变异,其类型为Self::Item,而不是mut。 -
@Stargateur 谢谢,那种帮助!但我认为
rust-lang链接已损坏。您可以将其添加为带有固定链接的答案吗?
标签: rust