玩弄Rust,我正在将一些代码提取到一个类中.为了使其保持独立但功能分离,我想挂起一个回调函数并稍后调用它.为了简单起见,包括跳过明显的fn new(),我们有类似的东西:
pub struct Toy {
go: fn(count: i16) -> String,
}
impl Toy {
fn lets_go(&mut self, n: i16) -> String {
self.go(n)
}
}
Run Code Online (Sandbox Code Playgroud)
建筑给了我......
...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)
Run Code Online (Sandbox Code Playgroud)
据推测,有一个特殊的语法(或完全不同的构造)可以理解self.go()调用,但我没有在任何文档中看到类似情况的示例或描述,所以我很欣赏任何方向.
显然,.go 可能是类似仿函数的类,但对Rust来说这似乎不是很惯用.
foo.bar(...)总是被解析为方法调用,它从不查找字段.这避免了歧义,特别是对于特征.通过将调用和字段访问分成两个不同的表达式,可以强制它成为字段访问,例如,
let f = self.go;
f(n)
Run Code Online (Sandbox Code Playgroud)
或者,更好,只是(self.go)(n).
问题#2392包括改进这些诊断.