【发布时间】:2020-08-27 13:54:25
【问题描述】:
我真的是 rust 新手,在进行 rustlings 练习时,我发现了一些关于堆叠选项的东西我并不完全理解。
给定以下代码:
let vector = vec![Some(24), None, Some(42)];
let mut iter = vector.iter();
while let Some(Some(number)) = iter.next() {
println!("Number: {}", number);
}
我希望看到以下输出:
Number: 24
Number: 42
但我猜只要 rust 遇到 None,while 循环就会退出,只打印 24
迭代和解包可选值的最惯用的 rust 代码是什么? 我得到的最接近的看起来像这样:
let mut iter = vector.iter();
while let Some(iterNext) = iter.next() {
if let Some(num) = iterNext {
println!("Number: {}", num);
}
}
或者也可以通过在 for 循环中检查是否存在来完成:
for opt in &vector {
if opt.is_some() {
println!("Number: {}", opt.unwrap());
}
}
【问题讨论】:
-
确实,当它遇到第二个元素,即
Some(None),while循环就会中断。什么是“更惯用”或多或少见仁见智,但我肯定更喜欢if let而不是is_some/unwrap版本。if let的全部意义在于,您可以避免手动检查/解包选项。
标签: rust