rust - 如何在新线程中调用递归闭包?
问题描述
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`
解决方案
推荐阅读
- reactjs - await 中止 React 应用程序中的函数。为什么?
- php - 如何在codeigniter中查找重复记录
- apostrophe-cms - Apostrophe 更新版本到最新版本时出错
- ios - 如何从应用程序内部或外部 MDM 以编程方式更改屏幕时间和隐私限制设置?
- python - Python:如何删除多列具有相等值的行?
- python - Flask 服务器无法读取西里尔文请求
- reactjs - 使用文件名从 Amazon S3 存储桶下载
- javascript - JavaScript key.classList.add 问题
- javascript - WebStorm 中通过 ESLint 规则进行更漂亮的集成
- typescript - Chrome:调试本地打字稿文件不再起作用