2014-07-14 3 views
7

C'è un modo per creare un puntatore a un metodo in Rust? Ad esempio,Puntatore del metodo ruggine

struct Foo; 

impl Foo { 
    fn bar(&self) {} 
    fn baz(&self) {} 
} 

let foo = Foo; 
let callback = foo.bar; // Does not work 

risposta

15

Con UFCS, Foo::bar funzionerà, ottenendo un fn(&Foo) ->() (simile a Python); se questo è ciò che si vuole (cioè, definendolo come callback(&foo)), poi al momento, è necessario scrivere il proprio involucro:

fn foo_bar(x: &Foo) { x.bar() } 

let callback = foo_bar; 

Tuttavia, se si vuole con la variabile "sé" già legato (come in, chiamando callback() sarà lo stesso di chiamare bar sull'oggetto foo), allora è necessario utilizzare una chiusura esplicita

let callback = || foo.bar(); 
+1

Grazie. Usare una chiusura è anche una buona idea per legare "se stessi". – Vortico