我有一个返回 f64
的函数。我想确保使用该函数的输出,而不是只忽略它。有没有办法做到这一点?
返回类型不用于错误处理,因此将其包装在 Result
或 Option
中并没有真正意义。
我希望得到类似于以下代码的结果:
#[must_use]
fn calculate_the_thing(number: f64) -> f64 {
number * 2.0
}
我有一个返回 f64
的函数。我想确保使用该函数的输出,而不是只忽略它。有没有办法做到这一点?
返回类型不用于错误处理,因此将其包装在 Result
或 Option
中并没有真正意义。
我希望得到类似于以下代码的结果:
#[must_use]
fn calculate_the_thing(number: f64) -> f64 {
number * 2.0
}
#[must_use]
fn calculate_the_thing(number: f64) -> f64 {
number * 2.0
}
fn main() {
calculate_the_thing(4); // warning: unused return value of `calculate_the_thing ` which must be used
let _ = calculate_the_thing(4); // (no warning)
}
#[must_use]
只适用于类型,而不是单个值。#[must_use]
:#[must_use = "this value should be used (extract with .0)"]
pub struct MustUse<T>(pub T);
MustUse<f64>
,如果用户写calculate_the_thing(12.3)
,他们将会得到一个警告,甚至会建议正确的方法去获取他们想要的东西:let x = calculate_the_thing(12.3).0;
。例如:fn calculate_the_thing(number: f64) -> MustUse<f64> {
MustUse(number * 2.0)
}
fn main() {
calculate_the_thing(12.3); // whoops
let x = calculate_the_thing(12.3).0;
println!("{}", x);
}
warning: unused `MustUse` which must be used: this value should be used (extract with .0)
--> src/main.rs:9:5
|
9 | calculate_the_thing(12.3); // whoops
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: #[warn(unused_must_use)] on by default
是的,您可以通过 RFC 1940 和 Rust 1.27 开始提供的功能实现,而无需更改原始代码:
#[must_use]
fn calculate_the_thing(number: f64) -> f64 {
number * 2.0
}
fn main() {
calculate_the_thing(21.0);
}
warning: unused return value of `calculate_the_thing` which must be used
--> src/main.rs:7:5
|
7 | calculate_the_thing(21.0);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: #[warn(unused_must_use)] on by default
Finished dev [unoptimized + debuginfo] target(s) in 0.71s
Running `target/debug/playground`
Write::write
返回的写入字节数是must_use
而不仅仅是它所包装的Result
,那就太好了。忽略这一点,并假设所有数据都已被写入,很可能会导致间歇性错误。 - poolie