Как создать массив распакованных функций / замыканий?
Примечание редактора: этот вопрос задавался до Rust 1.0, и с тех пор некоторые синтаксис изменился, но основные концепции остаются. Некоторые ответы были обновлены для синтаксиса Rust 1.0.
Я новичок в Rust и пытаюсь что-то сделать с замыканиями, что тривиально в JavaScript, Python и т. Д., Но я сталкиваюсь с проблемами жизни в Rust. Я понимаю сообщение об ошибке, но оно заставляет меня поверить, что то, что я хочу сделать, довольно сложно в Rust.
Я просто хочу создать массив функций,a
такой, что
a[0]
это функция, возвращающая 0a[1]
это функция, возвращающая 1...a[9]
это функция, возвращающая 9Я старался:
fn main() {
let a : [||->uint, ..10];
for i in range(0u, 10) {
a[i] = ||{i};
}
println!("{} {} {}", a[1](), a[5](), a[9]())
}
Но я получил пожизненную ошибку. Сообщенная ошибка была «не может определить подходящий срок службы из-за противоречивых требований» для функций вa
потому что жизни не могут пережитьwhile
блокировать так, чтобы замыкания не могли пережить свой кадр стека, что, конечно, они бы сделали, потому что я вызываю их вprintln!
.
Я уверен, что должен быть способ создать этот массив функций, но как?