gpt4 book ai didi

rust - 为什么添加尝试!写!停止未使用的代码编译器警告?

转载 作者:行者123 更新时间:2023-11-29 08:06:22 26 4
gpt4 key购买 nike

我正在跟踪 Rust by Example Docs ,我收到了一个我不明白的编译器警告。

考虑这段代码:

use std::fmt::{self, Display};

struct Matrix(f32, f32, f32, f32);

impl Display for Matrix {
fn fmt(&self, f : &mut fmt::Formatter) -> fmt::Result {
try!(writeln!(f, " ( {:.2}, {:.2} ) ", self.0, self.1));
write!(f, " ( {:.2}, {:.2} ) ", self.2, self.3)
}
}

fn main() {
let m = Matrix(1f32,2f32,3f32,4f32);
print!("{}", m);
}

这编译没有错误并且工作正常,但是如果我们从第一个 writeln! 中删除 try!,那么该行就变成了

writeln!(f, " ( {:.2}, {:.2} ) ", self.0, self.1); 

我收到此编译器警告:

<std macros>:2:1: 2:54 warning: unused result which must be used, #[warn(unused_must_use)] on by default
<std macros>:2 $ dst . write_fmt ( format_args ! ( $ ( $ arg ) * ) ) )

这是为什么呢?编译器试图告诉我什么? writeln! 是否返回 try! 正在检查的某种错误对象?

我在这里找到了 writeln! 宏的源代码:https://github.com/rust-lang/rust/blob/36d746718086dfcc12f73562b1996daf2f8ba643/src/libcore/macros.rs#L396但我对它的理解还不够好,无法回答我自己的问题。

rustc --version 给我 rustc 1.10.0 (cfcb716cf 2016-07-03),如果相关的话。

最佳答案

write!writeln! 在传递给宏的第一个参数上调用名为 write_fmt 的方法。这通常对应于 std::io::Write 中的方法。或 std::fmt::Write特征(要求您首先使用特征),或来自 std::fmt::Formatter结构。

您会注意到它们都返回 Result . Result 具有 #[must_use] 属性,它会触发“必须使用的未使用结果”警告。

print!println! 另一方面,只是返回 ()

关于rust - 为什么添加尝试!写!停止未使用的代码编译器警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40335020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com