这是我要调用的函数:
#[inline]
pub fn spawn<F>(f: F) -> Handle
where F: FnOnce(&mut Coroutine) + Send + 'static
{
Self::spawn_opts_impl(Box::new(f), Options::default())
}
Run Code Online (Sandbox Code Playgroud)
然后,我创建了一个枚举,因为我实际上是想将其从一个线程发送到另一个线程,这也是为什么要将函数装箱。我还匹配了特征约束。
enum Message {
Task(Box<FnOnce(&mut Coroutine) + Send + 'static>),
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试从中提取函数Message:
fn main(){
let m = Message::Task(Box::new(|me| {
}));
let c = match m{
Message::Task(f) => Coroutine::spawn(f)
};
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
#[inline]
pub fn spawn<F>(f: F) -> Handle
where F: FnOnce(&mut Coroutine) + Send + 'static
{
Self::spawn_opts_impl(Box::new(f), Options::default())
}
Run Code Online (Sandbox Code Playgroud)
我不知道Rust在这里想告诉我什么。我认为问题是spawn期望使用非盒装函数,但是如果我尝试取消对盒装函数的引用,则会遇到相同的错误。
请注意,在问这个问题时,coroutine-rs没有建立,并且我修复了这个fork中的错误。
rust ×1