Rust 为什么在continue语句之前循环中的变量赋值被视为从不读取?
关于以下代码:Rust 为什么在continue语句之前循环中的变量赋值被视为从不读取?,rust,compiler-warnings,Rust,Compiler Warnings,关于以下代码: 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; }
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);
}
}
这是非常小的(因此请暂时忽略它将永远循环),但显示了问题:编译器似乎认为如果外部赋值覆盖了,那么中的i
,这显然不是因为continue
是我遗漏了什么,还是我在程序中引入了某种描述的错误,还是编译器的错误?编译器没有很好地意识到流中断控件。如果可以,您应该使用更加惯用的面向表达式的语法:
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)
}
}
}
fn main(){
设muti=None;
让mut cond=true;
而true和i.map_或(true,|x | x<10){
i=如果条件为{
cond=假;
部分(0)
}否则{
一些(5)
}
}
}
或者创建自定义迭代器。您不需要输入i
的类型。由于行i=Some(0)
,编译器知道i
是选项
,因为这是一个编译器错误,您可能只是接受警告,或者在本例中使用包含函数上的#[allow(unused_assignments)]
来抑制它。嗯,我将尝试这样做,但至少可以说,这将是令人费解的。实际代码有一些返回
s和if let
s,这在一定程度上使表达式提取复杂化。