Tam*_*mpa 4 struct pass-by-value move-semantics rust
这是我的结构:
#[derive(Copy, Clone)]
pub struct ArimaModel {
p: u8,
d: u8,
q: u8,
holdout_length: u16,
max_ar_lag: u8,
max_ma_lag: u8,
df_lags: u8,
time_series: Vec<f64>,
ar_lags: Vec<usize>,
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试将我的结构传递给多个函数。
这是我的错误:
#[derive(Copy, Clone)]
pub struct ArimaModel {
p: u8,
d: u8,
q: u8,
holdout_length: u16,
max_ar_lag: u8,
max_ma_lag: u8,
df_lags: u8,
time_series: Vec<f64>,
ar_lags: Vec<usize>,
}
Run Code Online (Sandbox Code Playgroud)
如果类型实现“隐式复制”Copy,即您不必显式声明要复制该值。因为实现了,所以它无法实现,从而防止您在没有注意到的情况下意外复制值。VecDropCopy
因此,Vec仅实现Clone(如果包含的类型实现Clone),以便您可以通过调用显式复制向量Clone。
同样,您应该三思而后行,是否ArimaModel应该真正派生Copy或您实际上想要派生Clone,以便您必须明确声明您想要一个副本。
但如果您只想传递ArimaModel到不同的函数,您可能需要借用它们(即传递&ArimaModel或&mut ArimaModel代替 ArimaModel)。