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