Rust 如何通过成员变量调用函数?
玩弄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
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)
本期内容包括改进这些诊断。非常好。我本应该猜到插入括号会有帮助,但从来没有。谢谢