當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Rust Fn用法及代碼示例


本文簡要介紹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-lang.org大神的英文原創作品 Trait std::ops::Fn。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。