2014-07-14 28 views
7

Rust'ta bir yönteme bir işaretçi oluşturmanın bir yolu var mı? Örneğin,Pas yöntemi işaretçisi

struct Foo; 

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

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

cevap

15

UFCS ile Foo::bar, sonuçta çalışacak bir (Python benzer) fn(&Foo) ->(); Zaten bağlı "kendini" değişkeni ile isterseniz Ancak

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

let callback = foo_bar; 

: Bu ne istediğinizi ise, o zaman şu anda, kendi sarıcı yazmak zorunda (yani callback(&foo) gibi çağrılabilir vardır) (olduğu gibi callback() çağıran foo nesne üzerinde bar arayarak aynı olacaktır), o zaman açık bir kapatma kısmının

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

Teşekkür kullanmak gerekir. Bir kapatma kullanmak da 'kendini' bağlamak için iyi bir fikirdir. – Vortico