Rust-如何在迭代中调用和传递闭包?

我有一个迭代:

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),但该参数仍然无法正常工作,并且编译器会说“溢出评估需求”。

lanyangyang1 回答:Rust-如何在迭代中调用和传递闭包?

递归时删除&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的无限递归,运行时堆栈会溢出。我假设您的实际代码使用了导致递归终止的循环条件…)

本文链接:https://www.f2er.com/3168652.html

大家都在问