2014-07-14 4 views
7

녹의 메서드에 대한 포인터를 만드는 방법이 있습니까? 예를 들어,녹 메서드 포인터

struct Foo; 

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

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

답변

15

UFCS으로 Foo::bar가 수득 작동하는 (파이썬 유사) fn(&Foo) ->(); 이미 바인딩은 "자기"변수를 원하는 경우, 그러나

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

let callback = foo_bar; 

이 당신이 원하는 경우, 다음 순간에, 당신이 당신의 자신의 래퍼를 작성해야합니다 (즉, callback(&foo)처럼 호출입니다) (같이 callback()를 호출하면 foo 객체에 bar를 호출하는 것과 동일합니다), 당신은 명시 적 폐쇄를

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

감사를 사용해야합니다. 클로저를 사용하는 것은'self'를 묶는 것도 좋은 생각입니다. – Vortico