我想要一个任意输入F
,它返回一个任意值Z
。从API角度来看,我想要这样的东西:
let mut action = ExecutableAction::create(move || {
true
});
在这种情况下,Z
是bool
的实例,而F
是返回Z
的函数。
我尝试了以下代码:
use std::sync::{Arc, Mutex};
pub struct ExecutableAction<F, Z>
where
F: FnMut() -> Z + Send + Sync,
{
action: Arc<Mutex<Box<F>>>,
}
impl<F, Z> ExecutableAction<F, Z>
where
F: FnMut<()> + Send + Sync,
Z: Send + Sync,
{
pub fn create(closure: F) -> Self
where
F: FnMut() -> Z + Send + Sync,
{
Self {
action: Arc::new(Mutex::new(closure)),
}
}
pub fn call(&mut self) -> Z {
self.action.lock().call()
}
}
error[E0658]: the precise format of `Fn`-family traits' type parameters is subject to change. Use parenthetical notation (Fn(Foo, Bar) -> Baz) instead (see issue #29625)
--> src/lib.rs:12:8
|
12 | F: FnMut<()> + Send + Sync,
| ^^^^^^^^^
我确定我的语法已关闭,因为它无法编译。我如何才能使它普遍适用?另外,用类型参数F
表示R
的参数又如何呢?怎么在这里添加?