Sto provando a selezionare una funzione da chiamare in base a una condizione. Voglio memorizzare quella funzione in una variabile in modo da poterla richiamare più tardi senza portare con sé le condizioni. Ecco un esempio minimo di lavoro:Seleziona dinamicamente una funzione da chiamare senza variabili intermedie
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();
}
La mia domanda è: è possibile liberarsi delle variabili intermedie? Ho provato semplicemente rimuovendo:
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();
}
ma poi il correttore prestito lamenta che i valori presi in prestito sono validi solo fino alla fine della partita (a proposito, il motivo per cui le funzioni sono 'static
comunque così dovrebbe essere valida per il? fine dei tempi). Ho anche provato a rendere esplicita la durata 'static
usando &foo as &'static Fn()
ma non funziona neanche.