Как в rust конвертировать place expression в value expressions?

Рейтинг: 1Ответов: 1Опубликовано: 06.07.2023
fn main() {
    let mut funcs: [fn() -> usize; 3] = [|| -> usize {0}; 3]; // инициализация "нулями"
    
    for i in 1..=3 {
        funcs[i - 1] = || -> u8 {to_rvalue("i")}; // функции to_rvalue нет, просто она символизирует то что мне нужно
    }
    for i in 0..=2 {
        println!("{}", funcs[i]());
    }
    
}

Я не понимаю как мне создавать лямбды так, чтобы использовалась переменная как value expr, а не place expr. Компилятор ругается что я замыкаю переменную и не компилирует

Ответы

▲ 2Принят

Либо вопросу не хватает контекста, либо пример не слишком удачный.

Но два разных замыкания не получится хранить в одном массиве, без использования трейта.

fn to_rvalue(val: &str) -> usize {
    1
}

fn main() {
    let mut funcs: [Box<dyn Fn() -> usize>; 3] = [
        Box::new(|| -> usize { 0 }),
        Box::new(|| -> usize { 0 }),
        Box::new(|| -> usize { 0 }),
    ];

    for i in 1..=3 {
        funcs[i - 1] = Box::new(|| -> usize { to_rvalue("i") });
    }

    for i in 0..=2 {
        println!("{}", funcs[i]());
    }
}