我有一个函数返回一个f64.我想确保使用此函数的输出,而不是忽略.有没有办法做到这一点?
返回类型不用于错误处理,因此将其包装在一个Result或Option不真正有意义.
我想要类似的东西:
#[must_use]
fn calculate_the_thing(number: f64) -> f64 {
number * 2.0
}
Run Code Online (Sandbox Code Playgroud)
huo*_*uon 12
不是在Rust 1.27之前.在这些版本中,#[must_use]仅适用于类型,而不适用于单个值.
一种替代方法是定义一个简单的包装类型#[must_use]:
#[must_use = "this value should be used (extract with .0)"]
pub struct MustUse<T>(pub T);
Run Code Online (Sandbox Code Playgroud)
然后你的函数可以返回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);
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
是的,您可以,这要归功于RFC 1940并且从 Rust 1.27 开始可用。您的原始代码按原样运行:
#[must_use]
fn calculate_the_thing(number: f64) -> f64 {
number * 2.0
}
fn main() {
calculate_the_thing(21.0);
}
Run Code Online (Sandbox Code Playgroud)
#[must_use]
fn calculate_the_thing(number: f64) -> f64 {
number * 2.0
}
fn main() {
calculate_the_thing(21.0);
}
Run Code Online (Sandbox Code Playgroud)