Я играл с обновлением структуры Rust на месте, используя связанные методы. Я нашел способ сделать это, но не был уверен, был ли мой код ниже идиоматическим Rust, а не просто обходным путем.
В частности, я использовал .to_owned()
в конце связанного метода, чтобы вернуть заимствованную структуру. Код компилируется и работает нормально. Вот минимальный пример.
//struct.rs
#[derive(Debug, Default, Clone, PartialEq)]
pub struct ModelDataCapture {
run: i32,
year: i32,
}
impl ModelDataCapture {
pub fn new() -> Self {
ModelDataCapture::default()
}
pub fn set_run(&mut self, run: i32) -> &mut ModelDataCapture {
self.run = run;
self
}
pub fn set_year(&mut self, year: i32) -> &mut ModelDataCapture {
self.year = year;
self
}
}
//main.rs
let data_capture = ModelDataCapture::new()
.set_run(0)
.set_year(1)
.to_owned(); // <<< QUESTION
println!("here is the data capture {:?}", data_capture);
Это правильный способ написать эту модификацию структуры на месте? Если я не включу метод .to_owned()
в конец цепочки, компиляция завершится ошибкой с сообщением о том, что временная переменная не живет достаточно долго.