迭代二维Vector选项

时间:2015-09-16 22:44:01

标签: rust

我尝试打印用于调试目的的二维矢量选项:

type Board = Vec<Vec<Option<String>>>;
let board: Board = vec![vec![None; 100]; 100];
for row in board.iter() {
    for field in row.iter() {
        match field {
            Some(val) => print!("{}", val),
            None => print!(" ")
        }
    }
    println!("");
}

但是,我收到以下错误:

error: type mismatch resolving `<core::slice::Iter<'_, core::option::Option<String>> as
                                core::iter::Iterator>::Item == core::option::Option<_>`:
 expected &-ptr,
    found enum `core::option::Option` [E0271]

似乎某种程度上iter()没有返回我认为是迭代器的内容,但我不确定该错误消息是由什么构成的。我尝试了iter_mut,引用,ref s,可变引用的变体。

1 个答案:

答案 0 :(得分:7)

Vec::iter返回的迭代器会产生引用,而不是值本身,即在您的情况下&Option<String>而不是Option<String>。您必须取消引用从迭代器获得的值,如下所示:

match *field {
    Some(ref val) => print!("{}", val),
    None => print!(" ")
}

请注意,您还需要在模式匹配的ref分支中使用Some,以避免移动val