【问题标题】:Rust: How to initialise a value in one conditional branch for use in another?Rust:如何在一个条件分支中初始化一个值以便在另一个条件分支中使用?
【发布时间】:2021-11-20 22:54:23
【问题描述】:

我想做类似下面的伪 Rust 代码:

let mut var;

for i in iter  {
  if condition  {
    var = some_obj;
  }
  else  {
    var.some_method();
  }
}

明显的问题是var.some_method(); 可能在var 在真正的分支中被初始化之前运行,所以这段代码不会编译。

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

我唯一的想法是在循环外用一个虚拟变量初始化var,但这似乎很老套。有没有一种干净的方法可以在这里实现我想要的?

【问题讨论】:

    标签: rust borrow-checker


    【解决方案1】:

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

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

    【讨论】:

    • 另外,为了您未来的理智,我建议您记录下这个循环的地狱,以便清楚为什么您确信展开是安全的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 2017-02-21
    • 1970-01-01
    相关资源
    最近更新 更多