小编Jon*_*son的帖子

Rust 中逻辑上但非法的未初始化变量

我对 Rust 比较陌生。结果证明这个问题很长,所以我将从底线开始: 您更喜欢哪种解决方案?你有什么想法或意见吗?

我的代码无法编译,因为第 6 ( prev = curr) 行和第 12 ( bar(...)) 行使用了编译器怀疑可能未初始化的变量。作为程序员,我知道没有理由担心,因为第 6 行和第 12 行不会在第一次迭代期间运行。

let mut curr: Enum;
let mut prev: Enum;

for i in 0..10 {
    if i > 0 {
        prev = curr;
    }

    curr = foo();

    if i > 0 {
        bar(&curr, &prev);
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道您对编译器的了解是有限的。所以我想出了 3 种不同的方法来回答语言的安全限制。

1)初始化并停止想太多

我可以用任意值初始化变量。风险在于维护者可能会错误地认为那些最初的、希望未使用的值具有某些重要意义。第 1-2 行将变为:

let mut curr: Enum = Enum::RED; // Just an arbitrary value!
let mut prev: Enum = Enum::BLUE; // …
Run Code Online (Sandbox Code Playgroud)

enums refactoring rust

9
推荐指数
2
解决办法
279
查看次数

标签 统计

enums ×1

refactoring ×1

rust ×1