如何调用一个新的线程递归封闭?(How to call a recursive closure in

2019-10-29 06:15发布

工具是用于功能编程有用功能的抓斗袋包括使得递归闭合 ,例如:

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内搭一件function B作为参数,再次function Bfunction 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`
文章来源: How to call a recursive closure in a new thread?
标签: rust