Trait core::ops::FnOnce1.0.0 [] [src]

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

A version of the call operator that takes a by-value receiver.

Examples

By-value closures automatically implement this trait, which allows them to be invoked.

let x = 5;
let square_x = move || x * x;
assert_eq!(square_x(), 25);Run

By-value Closures can also be passed to higher-level functions through a FnOnce parameter.

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 pointRun

Associated Types

The returned type after the call operator is used.

Required Methods

🔬 This is a nightly-only experimental API. (fn_traits #29625)

This is called when the call operator is used.

Implementors