本文簡要介紹rust語言中 Trait std::ops::FnOnce
的用法。
用法
pub trait FnOnce<Args> {
type Output;
extern "rust-call" fn call_once(self, args: Args) -> Self::Output;
}
采用by-value 接收器的調用運算符版本。
FnOnce
的實例可以被調用,但可能不能被多次調用。正因為如此,如果一個類型唯一知道的是它實現了FnOnce
,那麽它隻能被調用一次。
FnOnce
由可能消耗捕獲變量的閉包以及實現 FnMut
的所有類型自動實現,例如(安全)function pointers (因為 FnOnce
是 FnMut
的超級特征)。
由於 Fn
和 FnMut
都是 FnOnce
的子特征,因此可以在預期 FnOnce
的地方使用 Fn
或 FnMut
的任何實例。
當您想要接受function-like 類型的參數並且隻需要調用一次時,使用FnOnce
作為綁定。如果需要重複調用參數,使用 FnMut
作為綁定;如果您還需要它不改變狀態,請使用 Fn
。
見關於關閉的章節Rust 編程語言有關此主題的更多信息。
另外值得注意的是特殊語法Fn
特征(例如Fn(usize, bool) -> usize
)。對技術細節感興趣的可以參考中的相關部分魯斯托之書.
例子
使用 FnOnce
參數
fn consume_with_relish<F>(func: F)
where F: FnOnce() -> String
{
// `func` consumes its captured variables, so it cannot be run more
// than once.
println!("Consumed: {}", func());
println!("Delicious!");
// Attempting to invoke `func()` again will throw a `use of moved
// value` error for `func`.
}
let x = String::from("x");
let consume_and_return_x = move || x;
consume_with_relish(consume_and_return_x);
// `consume_and_return_x` can no longer be invoked at this point
相關用法
- Rust FnOnce用法及代碼示例
- Rust Fn用法及代碼示例
- Rust FnMut用法及代碼示例
- Rust Formatter.precision用法及代碼示例
- Rust Formatter.debug_list用法及代碼示例
- Rust Formatter.sign_minus用法及代碼示例
- Rust FromUtf16Error用法及代碼示例
- Rust FromUtf8Error.as_bytes用法及代碼示例
- Rust File用法及代碼示例
- Rust FromVecWithNulError.into_bytes用法及代碼示例
- Rust FileExt.read_exact_at用法及代碼示例
- Rust FileTypeExt.is_char_device用法及代碼示例
- Rust FromBytesWithNulError用法及代碼示例
- Rust File.open用法及代碼示例
- Rust File.sync_data用法及代碼示例
- Rust Formatter.write_fmt用法及代碼示例
- Rust FromResidual.from_residual用法及代碼示例
- Rust From用法及代碼示例
- Rust FileType.is_symlink用法及代碼示例
- Rust File.options用法及代碼示例
- Rust FileExt.write_at用法及代碼示例
- Rust FromUtf8Error.into_bytes用法及代碼示例
- Rust Formatter.write_str用法及代碼示例
- Rust Formatter.debug_tuple用法及代碼示例
- Rust Formatter.fill用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 Trait std::ops::FnOnce。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。