防止未使用分配的优雅方法?

Web*_*ber 5 rust

语境

有时,我发现严格的输入警告更分散注意力而不是有用,同时仍然将一些想法放入代码中,并且在对其进行理智审查之前。

我正在寻找一种快速的编程方法来防止“未使用的声明”警告,以提高我的工作流程。

例子

我将尝试通过一个例子来说明我的意思。

// use rand::Rng;

fn breaking_out_of_nested_loops_using_labels() {
    let mut innermost_loop_reached: bool = false;

    'outermost_loop: loop {
        loop {
            // if rand::thread_rng().gen::<u8>() >= u8::MAX / 2 {
            //    break;
            // }

            loop {
                innermost_loop_reached = true;
                break 'outermost_loop;
            }
        }
    }

    println!(
        "Inner loop was {}reached",
        if innermost_loop_reached { "" } else { "not " }
    )
}
Run Code Online (Sandbox Code Playgroud)

代码结果出现以下警告:

编译器警告,指示未使用的分配

显然编译器是正确的。

问题

我很好奇是否有一种快速方法可以在键入一些初始代码时“欺骗”或忽略未使用的赋值警告,而您只想知道代码是否仍然可以编译。

经验丰富的 Rust 程序员如何解决这个问题?或者您是否只是学会忽略这些警告,直到您准备好处理它们?

请注意

注释掉的代码是我用来防止弹出警告的代码,同时仍在尝试代码。显然,导入一个板条箱并使用随机条件需要大量工作,因此并不理想。

那时我不妨将#[allow(unused_assignments)]-allow-rule 放在我的函数之上。但这就是我试图避免不得不做的事情,因为;

  • 我可能会忘记删除它。
  • 如果我必须从编译器输出中复制警告,它已经会中断我的工作流程。

har*_*mic 6

您可以通过rustc标志控制 lint 级别- 例如-A unused_assignments可以消除未使用的分配警告。

您可以配置 Cargo,以便在rustc 使用 config.toml文件调用时应用特定标志,您可以将其放置在项目中、您的 in~/.cargo/config.toml或许多其他位置 - 请参阅 Cargo 文档。

您可以将所需的 Rust 标志放置在该[build]部分中,如下所示:

[build]
rustflags = ["-A", "unused_assignments"]
Run Code Online (Sandbox Code Playgroud)

当然,当您完成初始实验编码阶段时,您仍然需要记住删除它,但至少它不会散布在您的代码中。

不幸的是,尚不可能为每个配置文件设置 rustflags - 能够减少警告debug但保留所有警告可能会很棒release。有一个为此开放的功能请求,因此也许将来会成为可能。

您还可以使用环境变量控制 rust 参数RUSTFLAGS。不过,我通常发现这对于 IDE 这样的环境不太有用,这可能会导致很难控制运行 Cargo 的环境变量。


小智 5

您可以尝试为变量命名_innermost_loop_reached

在变量名称的开头添加下划线可防止编译器显示警告unused_assignments