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

时间:2015-01-16 23:39:50

标签: 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.../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来说,这似乎并非惯用。

1 个答案:

答案 0 :(得分:8)

foo.bar(...)始终被解析为方法调用,它从不查找字段。这避免了歧义,特别是对于特征。通过将调用和字段访问分成两个不同的表达式,可以强制它成为字段访问,例​​如,

let f = self.go;
f(n)

或者,更好的是(self.go)(n)

问题#2392涵盖了改善这些诊断的方法。