Rust 幻象类型参数的生存期 使用std::marker::PhantomData; 使用std::sync::{mpsc,Arc,Mutex}; 使用std::线程; 类型作业=框T+发送+'静态>; 结构工人{ id:使用, 线程:选项, 幻影:幻影数据, } 枚举消息{ 新工作, 终止 } 植入工人{ fn新( id:使用, 接收器:Arc, 发件人:Arc, )->工人{ 让线程=线程::繁殖(移动| |循环{ 让msg=receiver.lock().unwrap().recv().unwrap(); 配味精{ 消息::NewJob(job)=>{ println!(“工人{}找到了工作。”,id); 设v=job(); sender.lock().unwrap().send(v.unwrap(); } 消息::终止=>{ println!(“工人{}被告知终止。”,id); 打破 } } }); 工人{ 身份证件 线程:一些(线程), 幻影:幻影数据, } } }

Rust 幻象类型参数的生存期 使用std::marker::PhantomData; 使用std::sync::{mpsc,Arc,Mutex}; 使用std::线程; 类型作业=框T+发送+'静态>; 结构工人{ id:使用, 线程:选项, 幻影:幻影数据, } 枚举消息{ 新工作, 终止 } 植入工人{ fn新( id:使用, 接收器:Arc, 发件人:Arc, )->工人{ 让线程=线程::繁殖(移动| |循环{ 让msg=receiver.lock().unwrap().recv().unwrap(); 配味精{ 消息::NewJob(job)=>{ println!(“工人{}找到了工作。”,id); 设v=job(); sender.lock().unwrap().send(v.unwrap(); } 消息::终止=>{ println!(“工人{}被告知终止。”,id); 打破 } } }); 工人{ 身份证件 线程:一些(线程), 幻影:幻影数据, } } },rust,lifetime,Rust,Lifetime,这段代码大部分直接来自,但我尝试将其设置为泛型,以便作业可以返回一个结果,然后将该结果发送回主线程。问题是,它无法编译: error[E0310]: the parameter type `T` may not live long enough --> src/lib.rs:24:22 | 18 | impl<T: Send> Worker<T> { | -- help: consider adding an explicit lifeti

这段代码大部分直接来自,但我尝试将其设置为泛型,以便作业可以返回一个结果,然后将该结果发送回主线程。问题是,它无法编译:

error[E0310]: the parameter type `T` may not live long enough
  --> src/lib.rs:24:22
   |
18 | impl<T: Send> Worker<T> {
   |      -- help: consider adding an explicit lifetime bound...: `T: 'static +`
...
24 |         let thread = thread::spawn(move || loop {
   |                      ^^^^^^^^^^^^^ ...so that the type `[closure@src/lib.rs:24:36: 38:10]` will meet its required lifetime bounds
error[E0310]:参数类型'T'可能寿命不够长
-->src/lib.rs:24:22
|
18 |执行工人{
-帮助:考虑添加显式生命周期绑定:…t:“static +”
...
24 |让线程=线程::繁殖(移动| |循环{
|^^^^^^^^^^^^^^…以便`[closure@src/lib.rs:24:36:38:10]`将满足其所需的生存期限限制

我不明白为什么Borrock会在那个时候抱怨生命周期,特别是因为没有任何值被借来,或者在这个函数的任何地方。使用公共生命周期(
'a
)也不起作用,只有
'静态
进行编译。

代码中可能不一定有任何明显的引用,但泛型
t
可以是引用本身,
和'a t
,也可以是包含引用的结构,
类型