3
我有一個返回f64的函數。我想確保使用此函數的輸出,而不是僅僅忽略。有沒有辦法做到這一點?我可以將must_use應用於函數結果嗎?
返回類型不用於錯誤處理,因此將其包裝在result
或option
中並沒有什麼意義。
我想類似這樣的東西:
#[must_use]
fn calculate_the_thing(number: f64) -> f64{
number * 2
}
我有一個返回f64的函數。我想確保使用此函數的輸出,而不是僅僅忽略。有沒有辦法做到這一點?我可以將must_use應用於函數結果嗎?
返回類型不用於錯誤處理,因此將其包裝在result
或option
中並沒有什麼意義。
我想類似這樣的東西:
#[must_use]
fn calculate_the_thing(number: f64) -> f64{
number * 2
}
不,你不能,#[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;
。 For instance:
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);
}
<anon>:9:5: 9:31 warning: unused result which must be used: this value should be used (extract with .0), #[warn(unused_must_use)] on by default
<anon>:9 calculate_the_thing(12.3); // whoops
^~~~~~~~~~~~~~~~~~~~~~~~~~
我的確寫了RFC 886提議延長#[must_use]
,但卻遭到拒絕的動機不足。
*用*。*提取 - 這是一點點的光滑,我沒有想到。很酷! – Shepmaster
如果寫入的字節數從['Write :: write'](https://doc.rust-lang.org/std/io/trait.Write.html#tymethod.write)返回,是'must_use',而不僅僅是它包裹的'Result',忽略這一點,並假設所有數據都被寫入,可能是一個間歇性的錯誤。 – poolie
悲傷。 RFC 886本來是太棒了 - (實際上我正在尋找)。 :( – U007D