相关疑难解决方法(0)

特质界限不满足

协程

这是我要调用的函数:

#[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

5
推荐指数
1
解决办法
6406
查看次数

标签 统计

rust ×1