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 感到满意时才应该这样做
归档时间: |
|
查看次数: |
222 次 |
最近记录: |