如何在方法中调用闭包

rap*_*2-h 2 rust

我尝试从为 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. 错误:此函数采用 1 个参数,但提供了 0 个参数
  2. 错误:显式使用未装箱的闭包方法call是实验性的 [E0174]

我不确定第一个错误,但我想如果它是实验性的,我现在不会使用这个功能。

有没有办法在方法中调用闭包?

She*_*ter 6

将成员名称括在括号中:

fn do_something(&self) {
    (self.f)()
}
Run Code Online (Sandbox Code Playgroud)

如果我没记错的话,根本原因与解析代码时的优先级有关。self.f()查找名为 的方法f,但会失败,因为它不存在。(self.f)()导致它以不同的方式解析,特别是寻找成员变量。