我尝试打印用于调试目的的二维矢量选项:
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,可变引用的变体。
答案 0 :(得分:7)
Vec::iter
返回的迭代器会产生引用,而不是值本身,即在您的情况下&Option<String>
而不是Option<String>
。您必须取消引用从迭代器获得的值,如下所示:
match *field {
Some(ref val) => print!("{}", val),
None => print!(" ")
}
请注意,您还需要在模式匹配的ref
分支中使用Some
,以避免移动val
。