如何通过成员变量调用函数?
How do I call a function through a member variable?
玩 Rust,我正在将一些代码提取到 class。为了保持它独立但独立的功能,我想保留一个回调函数并在以后调用它。为了简单起见,包括跳过明显的 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
可以 是一个类似函子的 class,但这对于 Rust 来说似乎不是很惯用。
foo.bar(...)
总是被解析为方法调用,它从不查找字段。这避免了歧义,尤其是特征。可以通过将调用和字段访问分成两个不同的表达式来强制它成为字段访问,例如,
let f = self.go;
f(n)
或者,更好的是 (self.go)(n)
。
问题 #2392 包括改进这些诊断。
玩 Rust,我正在将一些代码提取到 class。为了保持它独立但独立的功能,我想保留一个回调函数并在以后调用它。为了简单起见,包括跳过明显的 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
可以 是一个类似函子的 class,但这对于 Rust 来说似乎不是很惯用。
foo.bar(...)
总是被解析为方法调用,它从不查找字段。这避免了歧义,尤其是特征。可以通过将调用和字段访问分成两个不同的表达式来强制它成为字段访问,例如,
let f = self.go;
f(n)
或者,更好的是 (self.go)(n)
。
问题 #2392 包括改进这些诊断。