私はRustを初めて使いました。学習の練習として、私はかつてC++で書いたシンプルなタイマー構造体を作成しようとしています。インタフェースと実装は次のようなものになります。私はこれが原因start
関数内use of moved value: self
の誤差がある理由を理解デザインヘルプ:構造内のスレッディング
pub struct Timer {
handle: Option<std::thread::JoinHandle<()>>,
alive: bool,
}
impl Timer {
pub fn new() {
Timer {
handle: None,
alive: false,
}
}
pub fn start(&'static mut self) {
// Oops! How do I do this?
self.handle = Some(std::thread::spawn(move || {
self.alive = true;
self.loop()
}));
}
pub fn stop(&mut self) {
self.alive = false;
self.handle.unwrap().join()
}
pub fn loop(&self) {
// while alive
}
}
を、私は、私が何かするようデザインに私の構造体をなってるか思ったんだけどこれはうまくいくでしょう。私が考えることができるすべてのシナリオで、私はいつも二重の借りの状況があります。
私はインテリアの変更可能性についてもっと知る必要があると思っていますが、それ以上のウサギの穴を開ける前にデザインのガイダンスを聞いてみると思いました。
あなたの 'struct'定義と' impl'は並んでいません。定義には1つのメンバ( 'handle')があり、' new'の実装には2つのメンバ( 'thread'と' alive')があります。私はそれが何であるべきかを推測しますが、コード内にあるものと一致すると良いでしょう。 –
私はそれをもっと整理するつもりです、私は例を簡潔にするために多くのコードを簡略化しました。 – sholsapp
はい、私はそれが本質にまで蒸留されているのを見ることができ、あなたが入れている努力に感謝します:) –