本文簡要介紹rust語言中 Trait std::ops::Fn
的用法。
用法
pub trait Fn<Args>: FnMut<Args> {
extern "rust-call" fn call(&self, args: Args) -> Self::Output;
}
采用不可變接收器的調用運算符版本。
Fn
的實例可以重複調用而不會改變狀態。
此特征 ( Fn
) 不應與 function pointers ( fn
) 混淆。
Fn
由閉包自動實現,閉包僅采用對捕獲變量的不可變引用或根本不捕獲任何內容,以及(安全)function pointers(有一些警告,請參閱其文檔以獲取更多詳細信息)。此外,對於實現 Fn
的任何類型 F
, &F
也實現 Fn
。
由於 FnMut
和 FnOnce
都是 Fn
的超特征,因此 Fn
的任何實例都可以用作預期 FnMut
或 FnOnce
的參數。
當您想要接受 function-like 類型的參數並且需要重複調用它且不改變狀態(例如,同時調用它時)時,使用 Fn
作為綁定。如果您不需要如此嚴格的要求,請使用 FnMut
或 FnOnce
作為界限。
見關於關閉的章節Rust 編程語言有關此主題的更多信息。
另外值得注意的是特殊語法Fn
特征(例如Fn(usize, bool) -> usize
)。對技術細節感興趣的可以參考中的相關部分魯斯托之書.
例子
調用閉包
let square = |x| x * x;
assert_eq!(square(5), 25);
使用 Fn
參數
fn call_with_one<F>(func: F) -> usize
where F: Fn(usize) -> usize {
func(1)
}
let double = |x| x * 2;
assert_eq!(call_with_one(double), 2);
相關用法
- Rust Fn用法及代碼示例
- Rust FnOnce用法及代碼示例
- 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::Fn。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。