Rust - Как вызвать и передать замыкание в итерации? - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть итерация:

fn foo<F>(mut callback: F)
    where F: FnMut(MyStruct)
{
    // produce an instance of MyStruct
    callback(my_struct);
    for ... { // some conditions
        foo(callback)
    }
}

И закрытие может быть:

let my_vec = vec![];
let mut callback = |my_struct: MyStruct| {my_vec.push(my_struct);};
foo(callback);

В моем цикле for владение callback перемещено, поэтомукод выше не работает. Я пытаюсь заменить параметр на mut callback: &mut F и использую foo(&mut callback), который все еще не работает, и компилятор говорит «переполнение при оценке требования».

1 Ответ

1 голос
/ 04 ноября 2019

Удалите &mut при повторении:

fn foo<F>(callback: &mut F)
    where F: FnMut(MyStruct)
{
    let my_struct = MyStruct;
    callback(my_struct);
    for _ in 0..3 { // some conditions
        foo(callback);      // <- HERE
    }
}

Playground (примечание: это переполняет стек при запуске из-за бесконечной рекурсии foo. Я предполагаю, что вашреальный код использует условие цикла, которое приводит к завершению рекурсии…)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...