本文简要介绍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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。