Comment faire un struct accepter le type `impl std :: ops :: Fn <()>` comme son champ?

voix
0

Dans Rust 1,26 une nouvelle fonctionnalité appelée impl a été stabilisé qui trait rend fonction capable de retourner une fermeture Unboxed. Mais comment définir un type de champ struct pour une fermeture Unboxed, le code ci-dessous ne compile pas:

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

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

fn main() {    
    let hold_my_closure = HoldClosure {
        closure: return_closure()
    };
}
Créé 20/10/2018 à 03:27
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

Il suffit d'utiliser un argument de type générique.

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)();
}
Créé 20/10/2018 à 06:01
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more