Ich versuche, eine Funktion zu wählen, die abhängig von einer Bedingung aufgerufen wird. Ich möchte diese Funktion in einer Variablen speichern, damit ich sie später wieder aufrufen kann, ohne die Bedingung zu tragen. Hier ist ein funktionierendes minimales Beispiel:Wählen Sie dynamisch eine Funktion zum Aufrufen ohne Zwischenvariablen
fn foo() {
println! ("Foo");
}
fn bar() {
println! ("Bar");
}
fn main() {
let selector = 0;
let foo: &Fn() = &foo;
let bar: &Fn() = &bar;
let test = match selector {
0 => foo,
_ => bar
};
test();
}
Meine Frage ist: Ist es möglich, die Zwischenvariablen loszuwerden? Ich habe einfach versucht, zu entfernen sie:
fn foo() {
println! ("Foo");
}
fn bar() {
println! ("Bar");
}
fn main() {
let selector = 0;
let test = match selector {
0 => &foo as &Fn(),
_ => &bar as &Fn()
};
test();
}
aber dann der borrow checker beklagt, dass die geliehenen Werte bis zum Ende des Spiels nur gültig sind (btw, warum die Funktionen sind 'static
ohnehin so sollte die Gültigkeit? Ende der Zeiten). Ich habe auch versucht, die 'static
Lebensdauer explizit zu machen, indem ich &foo as &'static Fn()
verwende, aber das funktioniert auch nicht.