Как заставить структуру принимать тип `impl std :: ops :: Fn <()>` в качестве поля? - PullRequest
0 голосов
/ 20 октября 2018

В Rust 1.26 была стабилизирована новая функция под названием Impl Trait, которая позволяет функции возвращать закрытое закрытое окно.Но как определить тип поля структуры для неупакованного замыкания, код ниже не компилируется:

fn return_closure() -> impl Fn() -> () {
    move || {
        println!("abc");
    }
}

struct HoldClosure {
    closure: impl Fn() -> ()
}

fn main() {    
    let hold_my_closure = HoldClosure {
        closure: return_closure()
    };
}

1 Ответ

0 голосов
/ 20 октября 2018

Просто используйте аргумент универсального типа.

fn return_closure() -> impl Fn() {
    move || {
        println!("abc");
    }
}

struct HoldClosure<F: Fn()> {
    closure: F,
}

fn main() {    
    let hold_my_closure = HoldClosure {
        closure: return_closure()
    };

    (hold_my_closure.closure)();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...