【发布时间】:2022-01-22 06:44:33
【问题描述】:
我想创建一个结构,该结构有一个字段 mut_f,其中包含类型为 A -> A 的可变线程安全函数(闭包)
对于初始化,值为identity闭包。
let identity = |a| a;
struct Foo<A> {
mut_f: Arc<Mutex<dyn FnOnce(A) -> A>>
}
let foo = Foo {
mut_f: identity //error
};
这显然有错误:
让身份 = |a|一个;类型不匹配
预期结构
std::sync::Arc,发现闭包注意:预期结构
std::sync::Arc<std::sync::Mutex<(dyn std::ops::FnOnce(_) -> _ + 'static)>>找到闭包[closure@src/main.rs:36:20: 36:25]帮助:使用括号调用此闭包:(a)rustc(E0308) main.rs(36, 20): 找到的闭包 main.rs(44, 17): 预期结构std::sync::Arc, 发现关闭 没有可用的快速修复方法
基本上,我想让闭包定义尽可能简单,因为以后我需要以函数组合的方式组合另一个函数(闭包)。
所以我的问题是将 Cast 闭包转换为 Arc<Mutex<dyn FnOnce(A) -> A>> 类型的充分/智能方法是什么?
【问题讨论】:
-
stackoverflow.com/questions/27831944/… 会回答您的问题吗? (接受的答案有一个盒装闭包的例子)
-
实际上是的,我已经看到了答案,但没有注意到
Arc::new(Mutex::new(identity))是确切的答案,所以如果您发布答案,我会接受。功劳是你的。谢谢!
标签: rust