例如

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()`

推荐答案

对于fully-qualified syntaxFoo::bar将起作用,产生fn(&Foo) -> ()(类似于Python).

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

但是,如果您希望在self变量已经绑定的情况下调用它(如中所示,调用callback()将与调用foo对象上的bar相同),那么您需要使用显式闭包:

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

Rust相关问答推荐

阻止websocket中断的中断中断的终端(操作系统错误4)

Rust kill std::processs::child

无法将记录器向下转换回原始 struct

闭包不会发送,即使它只捕获发送变量

`RwLockWriteGuard_,T`不实现T实现的特征

`Pin`有没有不涉及不安全代码的目的?

如何将实现多个特征的 struct 传递给接受这些特征为&;mut?

如何设置activx websocket actorless的消息大小限制?

如何返回 struct 体中向量的切片

在 Rust 中,在第一个空格上分割字符串一次

我可以禁用发布模式的开发依赖功能吗?

从Rust 的临时文件中创建引用是什么意思?

在 Rust 中,我如何处理请求 javascript 的页面?

为什么1..=100返回一个范围而不是一个整数?

如何获取包裹在 Arc<> 和 RwLock<> 中的 Rust HashMap<> 的长度?

您如何使用枚举反序列化字符串,其中任何其他值反序列化为新类型变体同时保留字符串?

覆盖类型的要求到底是什么?为什么单个元素元组满足它?

有没有办法在 Rust 中对 BigInt 进行正确的位移?

如何在宏中的多个参数上编写嵌套循环?

有什么办法可以用 Rust 访问 Windows 最近的文件夹吗?