[英]How can I return a JoinHandle from a function?
解決這種情況的最佳方法是什么:
use std::thread;
struct Prefe;
fn main() {
let prefe = Prefe;
start(&prefe).join();
}
fn start(pre: &Prefe) -> thread::JoinHandle {
thread::spawn(move || {
println!("Test spawn");
})
}
我得到錯誤:
error[E0243]: wrong number of type arguments: expected 1, found 0
--> src/main.rs:11:26
|
11 | fn start(pre: &Prefe) -> thread::JoinHandle {
| ^^^^^^^^^^^^^^^^^^ expected 1 type argument
我想我可以使用類似這樣的東西,但我不知道該對T
使用什么:
fn start<T>(pre: &Prefe, t: T) -> thread::JoinHandle<T> {
thread::spawn(move || {
println!("Test spawn");
})
}
我看到thread::spawn
使用此函數返回,但是我不知道這是否可以幫助我或如何使用它:
Builder::new().spawn(f).unwrap()
這似乎可行,但我不知道這是對還是錯:
fn start(pre: &Prefe) -> thread::JoinHandle<()> {
thread::spawn(move || {
println!("Test spawn");
})
}
查看thread::spawn
的函數簽名:
pub fn spawn<F, T>(f: F) -> JoinHandle<T>
where
F: FnOnce() -> T,
F: Send + 'static,
T: Send + 'static,
這表示spawn
具有通用類型F
此類型必須實現特征FnOnce
。 該實現不接受任何參數,並返回類型T
的參數。 spawn
返回一個用相同類型T
參數化的JoinHandle
。
要使用此信息,您需要知道閉包返回的類型。 知道這一點后,便應使用JoinHandle
進行參數化。
您的示例閉包調用println!
返回類型為()
,因此JoinHandle
將使用此類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.