Ich versuche, eine Schließung von einem methoddo_something
für Struktur A
implementiert aufrufen. Ich habe ein paar Posts darüber gelesen, aber ich bin jetzt ein wenig verloren. Hier ist eine vereinfachte Version:So rufen Sie eine Schließung in einer Methode
// 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()
}
Es zeigt diesen Fehler:
error: no method named
f
found for type&A<F>
in the current scope
Ich dachte Verschlüsse just like this genannt wurden, aber es scheint, dass ich etwas verpasst. Ich habe versucht (ohne wirklich zu verstehen Zufallstest) self.f()
mit self.f.call()
zu ersetzen, aber es sagt, zwei Sache:
- error: this function takes 1 parameter but 0 parameters were supplied
- error: explicit use of unboxed closure method
call
is experimental [E0174]
ich über den ersten Fehler bin nicht sicher, aber ich denke, ich werde nicht über diese Funktion nun verwenden, wenn es Experimental.
Gibt es eine Möglichkeit, eine Schließung in einer Methode aufzurufen?
Es ist nicht ich:/Danke trotzdem! –
Der Hauptpunkt über Schließungen mit seltsamen Größen ist genau, aber der Compiler kennt die Größe von Schließungen und es ist möglich, das Boxen zu vermeiden. Sie müssen die Box auch nicht explizit dereferenzieren, um sie aufzurufen - "Box" implementiert "Deref". Daher funktioniert '(self.f)()' genauso gut, wenn es in einem Rahmen ist. – Shepmaster