Я пытаюсь выбрать функцию для вызова в зависимости от состояния. Я хочу сохранить эту функцию в переменной, чтобы я мог ее повторить позже, не выполняя условие. Здесь приведен рабочий минимальный пример:
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();
}
Мой вопрос: можно ли избавиться от промежуточных переменных? Я попробовал просто удалить их:
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();
}
но затем контролер заемщиков жалуется, что заемные значения действительны только до конца матча (кстати, почему? функции 'static
в любом случае так должны быть действительными до конца времен). Я также попытался сделать ядро 'static
явным с помощью &foo as &'static Fn()
, но это тоже не работает.