Rust:如何在一个条件分支中初始化一个值以供在另一个条件分支中使用?
Rust: How to initialise a value in one conditional branch for use in another?
我想做类似于以下伪 Rust 代码的事情:
let mut var;
for i in iter {
if condition {
var = some_obj;
}
else {
var.some_method();
}
}
明显的问题是 var.some_method();
可能 运行 在 var
之前在 true 分支中初始化,因此这段代码无法编译。
我有一个用例,但是我确定假分支不会执行,直到真分支至少执行一次。我希望能够根据在 true 分支中计算的结果定义 var
,然后在未来的循环迭代中将其用于 false 分支。
我唯一的想法是在循环外用一个虚拟变量初始化 var
,但这看起来很老套。有没有一种干净的方法可以实现我在这里想要的?
您可以使 var 具有类型 Option<T>
,并且由于您确定在执行 else 块时已设置 var,因此您可以调用 var.unwrap().some_method
。当你要设置 var 时,它应该是 var = Some(some_obj);
.
也可能有一些方法可以使用 MaybeUninnit
and/or 使用不安全的代码来做到这一点,但只有当你(真的)对 rust 感到满意时才应该这样做
我想做类似于以下伪 Rust 代码的事情:
let mut var;
for i in iter {
if condition {
var = some_obj;
}
else {
var.some_method();
}
}
明显的问题是 var.some_method();
可能 运行 在 var
之前在 true 分支中初始化,因此这段代码无法编译。
我有一个用例,但是我确定假分支不会执行,直到真分支至少执行一次。我希望能够根据在 true 分支中计算的结果定义 var
,然后在未来的循环迭代中将其用于 false 分支。
我唯一的想法是在循环外用一个虚拟变量初始化 var
,但这看起来很老套。有没有一种干净的方法可以实现我在这里想要的?
您可以使 var 具有类型 Option<T>
,并且由于您确定在执行 else 块时已设置 var,因此您可以调用 var.unwrap().some_method
。当你要设置 var 时,它应该是 var = Some(some_obj);
.
也可能有一些方法可以使用 MaybeUninnit
and/or 使用不安全的代码来做到这一点,但只有当你(真的)对 rust 感到满意时才应该这样做