Rust 如何通过成员变量调用函数?

Rust 如何通过成员变量调用函数?,rust,Rust,玩弄Rust,我将一些代码提取到一个类中。为了保持它的独立功能,我想挂起一个回调函数,稍后再调用它。为了保持简单,包括跳过明显的fn new(),我们有如下内容: pub struct Toy { go: fn(count: i16) -> String, } impl Toy { fn lets_go(&mut self, n: i16) -> String { self.go(n) } } 建筑给了我 ...path.../sr

玩弄Rust,我将一些代码提取到一个类中。为了保持它的独立功能,我想挂起一个回调函数,稍后再调用它。为了保持简单,包括跳过明显的
fn new()
,我们有如下内容:

pub struct Toy {
    go: fn(count: i16) -> String,
}

impl Toy {
    fn lets_go(&mut self, n: i16) -> String {
        self.go(n)
    }
}
建筑给了我

...path.../src/toy.rs:7:14: 7:19 error: type `&mut toy::Toy` does not implement any method in scope named `go`
...path.../src/toy.rs:7         self.go(n)
想必,有一种特殊的语法(或完全不同的构造)可以解释
self.go()
调用,但我在任何文档中都没有看到类似情况的示例或描述,因此我希望您能提供一些指导

显然,
.go
可能是一个类似于函子的类,但对于Rust来说,这似乎不是很习惯用法。

foo.bar(…)
总是解析为方法调用,它从不查找字段。这避免了模棱两可,尤其是在特征方面。通过将调用和字段访问分离为两个不同的表达式,可以强制它成为字段访问,例如

let f = self.go;
f(n)
或者,更好的做法是,只需
(self.go)(n)


本期内容包括改进这些诊断。

非常好。我本应该猜到插入括号会有帮助,但从来没有。谢谢