gpt4 book ai didi

rust - 如何在方法中调用闭包

转载 作者:行者123 更新时间:2023-11-29 08:03:06 24 4
gpt4 key购买 nike

我尝试从 method 调用闭包do_something为结构实现 A .我读了一些关于这个的帖子,但我现在有点迷路了。这是一个简化版本:

// 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()
}

它显示这个错误:

error: no method named f found for type &A<F> in the current scope

我以为闭包叫做 just like this ,但似乎我错过了什么。我试图替换 self.f()self.f.call() (没有真正理解的随机测试),但它说了两件事:

  1. error: this function takes 1 parameter but 0 parameters were supplied
  2. error: explicit use of unboxed closure method call is experimental [E0174]

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

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

最佳答案

将成员名称括在括号中:

fn do_something(&self) {
(self.f)()
}

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

关于rust - 如何在方法中调用闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39079604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com