Есть ли способ создать указатель функции на метод в Rust?

Например,

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

С полностью определенным синтаксисом Foo::bar будет работать, приводя к fn(&Foo) ->() (аналогично Python); если это то, что вы хотите (то есть называть это как callback(&foo)):

let callback = Foo::bar;

Однако, если вы хотите, чтобы переменная self уже была привязана (как, например, callback() будет таким же, как вызов bar для объекта foo), вам нужно использовать явное закрытие

let callback = || foo.bar();