methoddo_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.call()
でself.f()
を交換しようとしたが、それは2人の事言う:
- error: this function takes 1 parameter but 0 parameters were supplied
- error: explicit use of unboxed closure method
call
is experimental [E0174]
は私が最初のエラーについてはよく分からないが、私はそれがだ場合、私は今、この機能を使用しないだろうと思い実験的。
メソッドでクロージャを呼び出す方法はありますか?
それは私ではありません:/とにかくありがとう! –
奇妙なサイズのクロージャについての主なポイントは正確ですが、コンパイラはクロージャのサイズを知っており、ボクシングを避けることは可能です。 'Box'は' Deref'を実装しています。したがって、 '(self.f)()'はボックス化されているときも同様に機能します。 – Shepmaster