FnOnce
- это характеристика для замыканий, которую можно вызывать только один раз, как правило, потому что захваченные значения перемещаются в замыкание и используются во время вызова.Например, мы можем захватить значение и переместить его как возвращаемое значение:
fn delay<A: 'static>(a: A) -> Box<dyn FnOnce() -> A> {
Box::new(move || a)
}
fn main() {
let a = "hello".to_string();
let f = delay(a);
println!("{}", f());
}
Обратите внимание, что ключевое слово move
не является строго обязательным.Компилятор видит, что a
необходимо переместить в замыкание, чтобы вернуть его в качестве значения и удалить.