我尝试从为 structure 实现的方法 调用闭包。我读了一些关于这个的帖子,但我现在有点迷失了。这是一个简化版本:do_somethingA
// A simple structure
struct A<F> {
f: F,
}
// Implements new and do_something
impl<F> A<F> where F: Fn() {
fn new(f: F) -> A<F> {
A { f: f }
}
fn do_something(&self) {
self.f() // Error is here.
}
}
fn main() {
let a = A::new( || println!("Test") );
a.do_something()
}
Run Code Online (Sandbox Code Playgroud)
它显示此错误:
错误:在当前范围内
f找不到为类型命名的方法&A<F>
我以为闭包就是这样调用的,但似乎我错过了一些东西。我试图self.f()用self.f.call()(没有真正理解的随机测试)替换,但它说明了两件事:
- 错误:此函数采用 1 个参数,但提供了 0 个参数
- 错误:显式使用未装箱的闭包方法
call是实验性的 [E0174]
我不确定第一个错误,但我想如果它是实验性的,我现在不会使用这个功能。
有没有办法在方法中调用闭包?
将成员名称括在括号中:
fn do_something(&self) {
(self.f)()
}
Run Code Online (Sandbox Code Playgroud)
如果我没记错的话,根本原因与解析代码时的优先级有关。self.f()查找名为 的方法f,但会失败,因为它不存在。(self.f)()导致它以不同的方式解析,特别是寻找成员变量。