我遇到了lifetimes和借用點的問題。我已閱讀手冊和借用的指針教程,但是...我仍然卡住了。DuplexStream跨任務和關閉
的main.rs
素描
fn main() {
let (db_child, repo_child):(DuplexStream<~str, ~str>, DuplexStream<~str, ~str>) = DuplexStream();
do spawn {
slurp_repos(&repo_child);
}
}
素描的repos.rs
fn slurp_repos(chan: &'static DuplexStream<~str, ~str>) {
...
do request.begin |event| {
...
chan.send(api_url);
}
}
當我編譯這些模塊,main.rs有以下錯誤:
main.rs:21:20: 21:31 error: borrowed value does not live long enough
main.rs:21 slurp_repos(&repo_child);
^~~~~~~~~~~
note: borrowed pointer must be valid for the static lifetime...
main.rs:13:10: 1:0 note: ...but borrowed value is only valid for the block at 13:10
error: aborting due to previous error
我不能很弄清楚如何聲明我的DuplexStreams生命週期是靜態的。或者,這可能是用於slurp_repos函數類型的錯誤方法。
如果你想看到完整的上下文:
不應該將repo_child定義爲託管('@')嗎? – snf
我無法弄清楚如何聲明@repo_child。你有一個編譯的例子嗎? – Ozten
我想解決這個問題的一種方法是在閉包中更新狀態對象,然後在從request.begin返回後使用該通道。 [這似乎工作](https://github.com/ozten/learning_rust/commit/c002cc6881dd8bf3d39f653e6f52a7adcb987181)。 – Ozten