首页 > 解决方案 > 如何在新线程中调用递归闭包?

问题描述

工具是函数式编程的有用功能的抓包,包括制作递归闭包,例如:

extern crate tool;
use tool::prelude::*;

fn main() {
    let fib = fix(move |f, x| {
        if x == 0 || x == 1 {
            x
        } else {
            // `f` is `fib`
            f(x - 1) + f(x - 2)
        }
    });

    println!("{}", fib(10)); // print 55
}

我想实现的东西在这里:操场

这是概述:我正在定义一个function A将 afunction B作为参数,再次function B作为function C参数。我需要function C在一个新线程中调用,在这种情况下,使用&dyn内部函数的关键字会给我一个错误:

fn a(b: impl Fn(&dyn Fn() -> ()) -> ()) -> () {
 // ...
} 
error[E0277]: `dyn std::ops::Fn() ->()` cannot be shared between threads safely

我尝试下面的语法,但这给了我另一个错误:

fn a(b: impl Fn(impl Fn() -> ()) -> ()) -> () {
 // ...
}  
error[E0666]: nested `impl Trait` is not allowed
 --> src/main.rs:2:21
  |
2 |     fn a(b: impl Fn(impl Fn() -> ()) -> ()) -> () {
  |             --------^^^^^^^^^^^^^^^-------
  |             |       |
  |             |       nested `impl Trait` here
  |             outer `impl Trait`

标签: rust

解决方案


推荐阅读