Owen_Chao 的个人博客 / 0 / 4 / 创建于 1年前
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 协议》,转载必须注明作者和本文链接
detail 字段的类型是 Box,这是一个持有所有权的智能指针类型。你不能通过引用将内部字段的所有权转移出去,因为 Job 持有 detail 的所有权。
detail
Box
Job
如果你的目的是将 Task 转移到其他线程,可以考虑用通道 channel。
Task
channel
这语法真的吊 :joy:
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 } }
我要举报该,理由是:
detail
字段的类型是Box
,这是一个持有所有权的智能指针类型。你不能通过引用将内部字段的所有权转移出去,因为Job
持有detail
的所有权。如果你的目的是将
Task
转移到其他线程,可以考虑用通道channel
。这语法真的吊 :joy:
job 方法的签名和实现不一致,应该返回 Task 类型而不是 Task 类型的引用。此外,在 new 方法中不需要再次使用 Box::new 来包装 task,直接将 task 赋值给 detail 即可.