Rust:如何初始化一个条件分支中的值以便在另一个条件分支中使用?

muk*_*uke 1 rust borrow-checker

我想做一些类似于以下伪 Rust 代码的事情:

let mut var;

for i in iter  {
  if condition  {
    var = some_obj;
  }
  else  {
    var.some_method();
  }
}
Run Code Online (Sandbox Code Playgroud)

明显的问题是,可能会在 true 分支中初始化var.some_method();之前运行,因此该代码将无法编译。var

但是,我有一个用例,我确信在正确分支至少执行一次之前,错误分支不会执行。我希望能够var根据 true 分支中计算的结果进行定义,然后在未来循环迭代的 false 分支中使用它。

var我唯一的想法是在循环之外使用虚拟变量进行初始化,但这看起来很hacky。有没有一种干净的方法来实现我想要的?

小智 5

您可以使 var 具有类型Option<T>,并且由于您确定 var 在执行 else 块时已被设置,因此您可以调用var.unwrap().some_method. 当你要设置 var 时,它应该是var = Some(some_obj);.

也可能有一些方法可以使用MaybeUninnit和/或使用不安全的代码来做到这一点,但只有当你(真的)对 Rust 感到满意时才应该这样做