在Rust中有没有一种方法可以创建指向方法的函数指针?

37
例如,
struct Foo;

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

fn main() {
    let foo = Foo;
    let callback = foo.bar;
}
error[E0615]: attempted to take value of method `bar` on type `Foo`
  --> src/main.rs:10:24
   |
10 |     let callback = foo.bar;
   |                        ^^^ help: use parentheses to call the method: `bar()`
1个回答

55

使用全限定语法Foo::bar将起作用,产生一个fn(&Foo) -> ()(类似于Python)。

let callback = Foo::bar;
// called like
callback(&foo);

但是,如果你希望将self变量绑定(也就是说,调用callback()将与在foo对象上调用bar相同),那么你需要使用显式闭包:

let callback = || foo.bar();
// called like
callback();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接