【发布时间】:2019-06-20 18:50:57
【问题描述】:
我想编写一个接受整数的函数,并生成使用该整数的线程。可以计算整数。它不需要是文字。如果我使用具体类型,例如usize,它会起作用,但是当我尝试概括它时,它会fails to compile:
fn g<A>(a: A)
where
A: num::PrimInt + Copy + std::fmt::Debug + Send,
{
let hs = (0..3).map(|_| {
std::thread::spawn(move || {
println!("{:?}", a);
})
});
for h in hs {
h.join().unwrap();
}
}
错误是:
1 | fn g<A>(a: A)
| - help: consider adding an explicit lifetime bound `A: 'static`...
...
6 | std::thread::spawn(move || {
| ^^^^^^^^^^^^^^^^^^
|
note: ...so that the type `[closure@src/main.rs:6:28: 8:10 a:A]` will meet its required lifetime bounds
--> src/main.rs:6:9
|
6 | std::thread::spawn(move || {
| ^^^^^^^^^^^^^^^^^^
由于我具有Copy 特征,它应该能够为每个线程复制此值,因此不需要生命周期限制建议。我该如何解决这个问题?
【问题讨论】:
-
这个建议是必要的。考虑到所有不可变引用都是
Copy,无论它们的生命周期如何。 -
@Michail 什么参考?它是一个整数,我想为每个线程制作一个副本。
-
是的,但是引用类型有朝一日可能会实现
PrimInt,并且编译器会对此进行防范。 -
@Michail 这没有任何意义。 Copy 的目的是表明该值可以被复制。
-
我真的不擅长解释事情,所以这里有一个提供信息解释的问题:here 类似情况。
标签: multithreading generics rust