有没有办法在Rust中创建指向方法的指针?例如,
struct Foo;
impl Foo {
fn bar(&self) {}
fn baz(&self) {}
}
let foo = Foo;
let callback = foo.bar; // Does not work
答案 0 :(得分:16)
使用UFCS,Foo::bar
将起作用,产生fn(&Foo) -> ()
(类似于Python);如果这是你想要的(也就是说,像callback(&foo)
那样调用),那么此刻,你必须编写自己的包装器:
fn foo_bar(x: &Foo) { x.bar() }
let callback = foo_bar;
然而,如果你想要" self"变量已绑定(如调用callback()
将与调用bar
对象上的foo
相同),那么您需要使用显式闭包
let callback = || foo.bar();