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 感到满意时才应该这样做