# Trait std::ops::FnOnce 1.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

### `type Output`
1.12.0

The returned type after the call operator is used.

## Required Methods

### `extern "rust-call" fn call_once(self, args: Args) -> Self::Output`

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

This is called when the call operator is used.

## Implementors

- `impl<'a, A, F> FnOnce<A> for &'a mut F where
  F: FnMut<A> + ?Sized,`
- `impl<'a, A, F> FnOnce<A> for &'a F where
  F: Fn<A> + ?Sized,`
- `impl<'a, A, R> FnOnce<A> for Box<FnBox<A, Output = R> + 'a>`
- `impl<'a, A, R> FnOnce<A> for Box<FnBox<A, Output = R> + 'a + Send>`
- `impl<R, F: FnOnce() -> R> FnOnce<()> for AssertUnwindSafe<F>`

# Help

## Keyboard Shortcuts

?
  Show this help dialog
S
  Focus the search field
⇤
  Move up in search results
⇥
  Move down in search results
⏎
  Go to active search result
+
  Collapse/expand all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g. `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g. `vec -> usize` or `* -> vec`)