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


Rust FnMut用法及代碼示例


本文簡要介紹rust語言中 Trait std::ops::FnMut 的用法。

用法

pub trait FnMut<Args>: FnOnce<Args> {
    extern "rust-call" fn call_mut(        &mut self,         args: Args    ) -> Self::Output;
}

采用可變接收器的調用運算符版本。

FnMut 的實例可以重複調用並且可能會改變狀態。

FnMut 由閉包自動實現,閉包對捕獲的變量進行可變引用,以及實現 Fn 的所有類型,例如(安全)function pointers (因為 FnMut Fn 的超級特征)。此外,對於實現 FnMut 的任何類型 F&mut F 也實現 FnMut

由於 FnOnce FnMut 的超特征,因此 FnMut 的任何實例都可以在預期 FnOnce 的地方使用,並且由於 Fn FnMut 的子特征,因此 Fn 的任何實例都可以在需要FnMut 的地方使用。

當你想接受一個function-like類型的參數並且需要重複調用它,同時允許它改變狀態時,使用FnMut作為綁定。如果您不希望參數改變狀態,請使用 Fn 作為界限;如果您不需要重複調用它,請使用 FnOnce

關於關閉的章節Rust 編程語言有關此主題的更多信息。

另外值得注意的是特殊語法Fn特征(例如Fn(usize, bool) -> usize)。對技術細節感興趣的可以參考中的相關部分魯斯托之書.

例子

調用可變捕獲閉包

let mut x = 5;
{
    let mut square_x = || x *= x;
    square_x();
}
assert_eq!(x, 25);

使用 FnMut 參數

fn do_twice<F>(mut func: F)
    where F: FnMut()
{
    func();
    func();
}

let mut x: usize = 1;
{
    let add_two_to_x = || x += 2;
    do_twice(add_two_to_x);
}

assert_eq!(x, 5);

相關用法


注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 Trait std::ops::FnMut。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。