上下文
有时候,我发现严格的类型警告更容易分散注意力,而不是有用的,同时仍然把一些想法变成代码,并且在审查它的合理性之前。
我正在寻找一种快速的编程方法来防止“未使用的声明”警告,以提高我的工作流程。
示例
我将试着用一个例子来说明我的意思。
// 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 " }
)
}
字符串
该代码将产生以下警告:
x1c 0d1x的数据
显然编译器是正确的。
问题
我很好奇是否有一种快速的方法可以在输入初始代码时“欺骗”或忽略未使用的赋值警告,而您只想知道代码是否仍然可以编译。
有经验的rust程序员是如何做到这一点的呢?或者你只是学会了忽略警告,直到你准备好处理它们?
请注意
注解掉的代码是我用来防止弹出警告的,同时仍然尝试代码。显然导入一个crate并使用一个随机条件是一个很大的工作,所以它不是理想的。
在这一点上,我可能会把#[allow(unused_assignments)]
-allow-rule放在我的函数之上。
- 我可能会忘记把它取下来。
- 如果我必须从编译器输出中复制警告,它已经中断了我的工作流程。
4条答案
按热度按时间mjqavswn1#
您可以通过
rustc
标志来控制lint级别-例如-A unused_assignments
将消除未使用的分配警告。您可以配置Cargo,使其在调用
rustc
using a config.toml文件时应用特定的标志,您可以将其放置在项目中,或~/.cargo/config.toml
中,或其他一些地方-请参阅cargo文档。您可以将所需的rust标志放置在
[build]
部分中,如下所示:字符串
当然,当你完成了最初的实验性编码阶段时,你仍然需要记住删除它,但至少它不会散布在你的代码中。
不幸的是,还不能为每个配置文件设置rustflags-如果能够降低
debug
的警告,但保留release
的警告,那就太好了。有一个feature request开放,所以也许将来会有可能。你也可以用
RUSTFLAGS
环境变量来控制rust参数,但我发现这对于IDE之类的环境来说用处不大,这可能会让你很难控制cargo运行的环境变量。ryevplcw2#
您可以尝试将变量命名为
_innermost_loop_reached
。在变量名的开头添加下划线可以防止编译器显示
unused_assignments
警告。vq8itlhq3#
一个解决方案是完全避免这个问题,利用
loop
可以是一个表达式的事实,并将该表达式分配给innermost_loop_reached
:字符串
这样做还有一个好处,就是所有从循环中退出(通过break)必须是
bool
类型,因为innermost_loop_reached
是一个bool
。也就是说,你可以避免大多数情况下innermost_loop_reached
应该在循环中得到一个值,但却没有,错误地保留了你的例子中的默认值false
。lf3rwulv4#
我是Rust的新手。
rustc
和cargo
的当前版本都是1.74.1。我在我的包清单Cargo.toml
中添加了以下内容:字符串
更多信息可查阅
https://doc.rust-lang.org/cargo/reference/manifest.html#the-lints-section