当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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