使用以下代码:
fn main() {
let mut i: Option<i32> = None;
let mut cond = true;
while true && i.map_or(true, |x| x < 10) {
if cond {
cond = false;
i = Some(0);
continue;
}
i = Some(5);
}
}
我得到警告:
warning: value assigned to `i` is never read
--> src/lib.rs:8:13
|
8 | i = Some(0);
| ^
|
= note: #[warn(unused_assignments)] on by default
这是最小化的(因此请永远忽略,因为它会永远循环),但是显示了一个问题:编译器似乎认为i
内部的if
被外部分配,由于continue
显然不是这种情况。
我是否丢失了某些东西,是否在程序中引入了某种描述性的错误,或者是编译器的错误?
答案 0 :(得分:7)
编译器不太了解流中断控件because of a bug。如果可以的话,您应该使用更惯用的面向表达式的语法:
fn main() {
let mut i = None;
let mut cond = true;
while true && i.map_or(true, |x| x < 10) {
i = if cond {
cond = false;
Some(0)
} else {
Some(5)
}
}
}
或创建自定义迭代器。