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


Rust FnOnce用法及代码示例


本文简要介绍rust语言中 Trait core::ops::FnOnce 的用法。

用法

pub trait FnOnce<Args> {
    type Output;
    extern "rust-call" fn call_once(self, args: Args) -> Self::Output;
}

采用by-value 接收器的调用运算符版本。

FnOnce 的实例可以被调用,但可能不能被多次调用。正因为如此,如果一个类型唯一知道的是它实现了FnOnce,那么它只能被调用一次。

FnOnce 由可能消耗捕获变量的闭包以及实现 FnMut 的所有类型自动实现,例如(安全)function pointers (因为 FnOnce FnMut 的超级特征)。

由于 Fn FnMut 都是 FnOnce 的子特征,因此可以在预期 FnOnce 的地方使用 Fn FnMut 的任何实例。

当您想要接受function-like 类型的参数并且只需要调用一次时,使用FnOnce 作为绑定。如果需要重复调用参数,使用 FnMut 作为绑定;如果您还需要它不改变状态,请使用 Fn

关于关闭的章节Rust 编程语言有关此主题的更多信息。

另外值得注意的是特殊语法Fn特征(例如Fn(usize, bool) -> usize)。对技术细节感兴趣的可以参考中的相关部分鲁斯托之书.

例子

使用 FnOnce 参数

fn consume_with_relish<F>(func: F)
    where F: FnOnce() -> String
{
    // `func` consumes its captured variables, so it cannot be run more
    // than once.
    println!("Consumed: {}", func());

    println!("Delicious!");

    // Attempting to invoke `func()` again will throw a `use of moved
    // value` error for `func`.
}

let x = String::from("x");
let consume_and_return_x = move || x;
consume_with_relish(consume_and_return_x);

// `consume_and_return_x` can no longer be invoked at this point

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Trait core::ops::FnOnce。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。