Dictionary 如何从Rust中的迭代器中解包BTreeMap项元组?
示例代码是:Dictionary 如何从Rust中的迭代器中解包BTreeMap项元组?,dictionary,rust,Dictionary,Rust,示例代码是: use std::collections::BTreeMap; fn main() { let mut map: BTreeMap<u8, Vec<u8>> = BTreeMap::new(); let idx = map.iter_mut().find(|t| { let (&k, &mut v) = t; v.is_empty() }); idx.map(|t| {
use std::collections::BTreeMap;
fn main() {
let mut map: BTreeMap<u8, Vec<u8>> = BTreeMap::new();
let idx = map.iter_mut().find(|t| {
let (&k, &mut v) = t;
v.is_empty()
});
idx.map(|t| {
let (&k, &mut v) = t;
v.push(5);
});
}
但是
:10:28:10:30错误:无法取消引用类型“(&u8,&mut collections::vec::vec)”
:10 let(&k,&mut v)=*t;
^~
如何解包并用于各种用途?查看错误消息:
expected `&(&u8, &mut collections::vec::Vec<u8>)`,
found `(_, _)`
(expected &-ptr,
found tuple) [E0308]
用于可变目的 如果您的意思是“如何将闭包中的值变异为
find
”,那么答案是“您不能”。Find返回对迭代项的不可变引用(&Self::item
):
fn find(&mut self,谓词:P)->选项
其中P:FnMut(&Self::Item)->bool
即使您的
Self::Item
可能是一个可变引用,但对可变引用的不可变引用仍然是不可变的。回答得很好。还感谢结果代码和注意到ref
不是&
,我认为这是一样的。
let (&k, &mut v) = *t;
<anon>:10:28: 10:30 error: type `(&u8, &mut collections::vec::Vec<u8>)` cannot be dereferenced
<anon>:10 let (&k, &mut v) = *t;
^~
expected `&(&u8, &mut collections::vec::Vec<u8>)`,
found `(_, _)`
(expected &-ptr,
found tuple) [E0308]
let idx = map.iter_mut().find(|&(k, ref v)| {
v.is_empty()
});
idx.map(|(_, mut v)| {
v.push(5);
});
fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
where P: FnMut(&Self::Item) -> bool