【发布时间】:2017-05-16 03:10:08
【问题描述】:
我正在使用链式方法更新 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() 方法,编译将失败并显示临时变量的寿命不够长的消息。
【问题讨论】:
-
你可能对这个箱子感兴趣 github.com/colin-kiegel/rust-derive-builder#how-it-works :)
-
@kennytm 感谢您的提示。是的,在我开始使用快捷方式之前,我看到了那个板条箱并且只是想练习编写自己的构建器:)。但我会更多地研究一下派生构建器箱。我只是想确保我可以包含我想要包含的输入验证逻辑。
标签: struct rust method-chaining borrow-checker