我正在玩弄使用鏈式方法更新Rust結構。我找到了一種方法來做到這一點,但我不確定下面的代碼是否是慣用的Rust,而不僅僅是一種解決方法。正在使用to_owned()慣用的方式來更新一個結構?
特別是,我在鏈接方法的末尾使用了.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()
方法,則編譯將失敗並顯示消息:臨時變量的存活時間不夠長。
你可能會對這個箱子感興趣https://github.com/colin-kiegel/rust-derive-builder#how-it-works :) – kennytm
@kennytm謝謝你的提示。是的,我看到那個箱子,只是在我開始使用快捷方式之前試圖寫自己的建造者:)。但我會研究一下派生構建器的箱子。我只是想確保我可以包含我想包含的輸入驗證邏輯。 – krishnab