复制结构以传递给函数 - 此字段未实现“复制”

Copy a struct to pass to a function - this field does not implement `Copy`

这是我的结构:

#[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>,
}

我正在尝试将我的结构传递给多个函数。

这是我的错误:

error[E0204]: the trait `Copy` may not be implemented for this type
  --> src/lib.rs:1:10
   |
1  | #[derive(Copy, Clone)]
   |          ^^^^
...
10 |     time_series: Vec<f64>,
   |     --------------------- this field does not implement `Copy`
11 |     ar_lags: Vec<usize>,
   |     ------------------- this field does not implement `Copy`

如果类型实现 Copy"copies happen implicitly",即您不必明确声明要复制该值。因为 Vec 实现了 Drop,它不能实现 Copy,防止你在没有注意到的情况下不小心复制值。

因此,Vec 仅实现了 Clone(如果包含的类型实现了 Clone),因此您可以通过调用 Clone.

同样,如果 ArimaModel 真的应该派生 Copy 或者如果你真的想派生 Clone,你应该三思,这样你就必须明确声明你想要一个副本。

但是如果你只想将 ArimaModel 传递给不同的函数,你可能想借用它们(即传递 &ArimaModel&mut ArimaModel 而不是 ArimaModel)。