我尝试从为structure实现的方法中 调用闭包。我读了一些有关此的文章,但现在有点迷路了。这是一个简化的版本: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()
}
它显示此错误:
错误:在当前作用域中
f
找不到类型的命名方法&A<F>
我以为闭包就是这样称呼的,但似乎我错过了一些东西。我尝试self.f()
用self.f.call()
(没有真正理解的随机测试)代替,但是它说了两件事:
- 错误:此函数需要1个参数,但提供了0个参数
- 错误:明确使用未装箱的闭合方法
call
是实验性的[E0174]
我不确定第一个错误,但是我想如果它是实验性功能,我现在就不会使用此功能。
有没有办法在方法中调用闭包?
将成员名称括在括号中:
fn do_something(&self) {
(self.f)()
}
如果我没记错的话,根本原因与解析代码时的优先级有关。self.f()
寻找标题为的方法f
,由于该方法不存在而将失败。(self.f)()
导致对其进行不同的解析,特别是查找成员变量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句