Generics 使用通道发送通用数据?要做到这一点,必须实施哪些特征/标记?

Generics 使用通道发送通用数据?要做到这一点,必须实施哪些特征/标记?,generics,rust,Generics,Rust,哪些特征和标记必须在通用类型T上实现,以便通过通道发送?类型T不应包含任何引用,且其所有内容均为任何引用中的“纯”(因此保证仅属于其范围)。对于T的所有嵌套字段也是如此。这样就不需要生命周期说明符来转移所有权。i32实现了哪些特性,而我的genric类型T没有实现这些特性来防止编译错误fn fn错误(mut数据:Vec)->接收机{ 设(s,r)=通道(); std::thread::spawn(移动||{ 而让一些(nextthing)=data.pop(){ s、 发送(下一步); } })

哪些特征和标记必须在通用类型T上实现,以便通过通道发送?类型T不应包含任何引用,且其所有内容均为任何引用中的“纯”(因此保证仅属于其范围)。对于T的所有嵌套字段也是如此。这样就不需要生命周期说明符来转移所有权。i32实现了哪些特性,而我的genric类型T没有实现这些特性来防止编译错误fn

fn错误(mut数据:Vec)->接收机{
设(s,r)=通道();
std::thread::spawn(移动||{
而让一些(nextthing)=data.pop(){
s、 发送(下一步);
}
});
R
}
相对于

fn thisworks(mut数据:Vec)->接收机{
设(s,r)=通道();
std::thread::spawn(移动||{
而让一些(nextthing)=data.pop(){
s、 发送(下一步);
}
});
R
}
错误:我只想让它像i32一样工作:所有权在整个生命周期内都是干净地转移的(可能与原语类型和i32的复制特性有关?)

error[E0310]:参数类型'T'可能寿命不够长
-->src/main.rs:7:5
|
5 | fn错误(mut数据:Vec)->接收机{
帮助——考虑添加一个显式的生命周期约束T:“static”…
6 | let(s,r)=通道();
7 |标准::线程::繁殖(移动)||{
|     ^^^^^^^^^^^^^^^^^^
|
注意:…以便`[closure@src/main.rs:7:24:11:6 data:std::vec::vec,s:std::sync::mpsc::Sender]`将满足其所需的生存期限制
-->src/main.rs:7:5
|
7 |标准::线程::繁殖(移动)||{
|     ^^^^^^^^^^^^^^^^^^
错误:由于上一个错误而中止
有关此错误的详细信息,请尝试“rustc--explain E0310”。
错误:无法编译“游乐场”。

游乐场链接是

它不是关于类型,而是关于类型的生存期

编译器错误是当场发生的。您需要的唯一更改是这一行:

fn error<T: Send+Sized+'static>(mut data: Vec<T>)->Receiver<T>{

fn错误关于一个类型有一个生命周期意味着什么,或者一个类型有一个生命周期意味着什么,还有更多的信息吗?我假设
+'static
意味着一个
T
的实例可能包含的任何引用都必须在程序的生命周期内有效。我肯定能找到大量导致问题的地方lems.让我们看看我是否能为您找到真正完整描述它的文档。
'static
在这种情况下施加的确切条件是,类型T中的所有引用都必须比
'static
更有效(这很有意义,因为它会跨越线程边界)i32是否具有“静态生存期到”
i32
不包含引用。
size
是泛型的默认绑定;您不需要显式编写它。
fn error<T: Send+Sized+'static>(mut data: Vec<T>)->Receiver<T>{