cannot move? 为什么cannot move? 我应该如何修改呢,我没有看明白。

pub struct  Job{
    detail: Task,
}


type Task = Box<dyn FnOnce() + Send + 'static>;

impl Job{
    pub fn new (task: Task) ->Self {
        Job{
            detail: Box::new(task),
        }
    }

    pub fn job(&self, i:i8) -> Task {
        self.detail
    }
}

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 4
长日将尽

detail 字段的类型是 Box,这是一个持有所有权的智能指针类型。你不能通过引用将内部字段的所有权转移出去,因为 Job 持有 detail 的所有权。

如果你的目的是将 Task 转移到其他线程,可以考虑用通道 channel

4个月前 评论

这语法真的吊 :joy:

4个月前 评论
Owen_Chao (楼主) 4个月前
pardon110

job 方法的签名和实现不一致,应该返回 Task 类型而不是 Task 类型的引用。此外,在 new 方法中不需要再次使用 Box::new 来包装 task,直接将 task 赋值给 detail 即可.

pub struct Job {
    detail: Task,
}

type Task = Box<dyn FnOnce() + Send + 'static>;

impl Job {
    pub fn new(task: Task) -> Self {
        Job {
            detail: task,
        }
    }

    pub fn job(self) -> Task {
        self.detail
    }
}
2个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!