collections::boxed::FnBox

Trait collections::boxed::FnBox

pub trait FnBox<A> {
    type Output;
    fn call_box(self: Box<Self>, args: A) -> Self::Output;
}
???? This is a nightly-only experimental API. (fnbox #28796)will be deprecated if and when Box<FnOnce> becomes usable

FnBox is a version of the FnOnce intended for use with boxed closure objects. The idea is that where one would normally store a Box<FnOnce()> in a data structure, you should use Box<FnBox()>. The two traits behave essentially the same, except that a FnBox closure can only be called if it is boxed. (Note that FnBox may be deprecated in the future if Box<FnOnce()> closures become directly usable.)

Example

Here is a snippet of code which creates a hashmap full of boxed once closures and then removes them one by one, calling each closure as it is removed. Note that the type of the closures stored in the map is Box<FnBox() -> i32> and not Box<FnOnce() -> i32>.

#![feature(fnbox)]

use std::boxed::FnBox;
use std::collections::HashMap;

fn make_map() -> HashMap<i32, Box<FnBox() -> i32>> {
    let mut map: HashMap<i32, Box<FnBox() -> i32>> = HashMap::new();
    map.insert(1, Box::new(|| 22));
    map.insert(2, Box::new(|| 44));
    map
}

fn main() {
    let mut map = make_map();
    for i in &[1, 2] {
        let f = map.remove(&i).unwrap();
        assert_eq!(f(), i * 22);
    }
}

Associated Types

???? This is a nightly-only experimental API. (fnbox #28796)will be deprecated if and when Box<FnOnce> becomes usable

Required Methods

???? This is a nightly-only experimental API. (fnbox #28796)will be deprecated if and when Box<FnOnce> becomes usable

Implementors

  • impl<A, F> FnBox<A> for F where
        F: FnOnce<A>, 

© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/collections/boxed/trait.FnBox.html

在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号

意见反馈
返回顶部