Я новичок в Rust. В качестве учебного упражнения я пытаюсь написать простую структуру таймера, которую я когда-то писал на C++. Интерфейс и реализация выглядит следующим образом:Помощь в дизайне: нарезка внутри структуры
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
}
}
Я понимаю, почему это ошибка из-за use of moved value: self
в функции start
, но мне интересно, как я должен дизайн мой, так что-структуру что-то как это будет работать. В каждом сценарии, о котором я могу думать, у меня всегда будет ситуация с двойным заимствованием.
У меня есть подозрение, что мне нужно больше узнать о внутренней изменчивости, но подумал, что я попрошу совета по проектированию, прежде чем спускать больше кроличьих отверстий.
Ваше 'struct' определение и' impl' не выстраиваются в линию. В определении у него есть один член ('handle'), а в реализации' new' он имеет два члена ('thread' и' alive'). Я догадываюсь, что это должно быть, но было бы лучше, если бы они соответствовали тому, что у вас есть в коде. –
Я поработаю над его очисткой больше, я упростил много кода, чтобы сохранить пример кратким. – sholsapp
Да, я вижу, что он перегонял по своей сути, и я ценю усилия, которые вы вложили :) Просто пытаясь разобраться в этом. –