本文簡要介紹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 Fn用法及代碼示例
- Rust FnOnce用法及代碼示例
- 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 FromSecsError用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 Trait std::ops::FnMut。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。