提问人:Tampa 提问时间:1/13/2019 最后编辑:ShepmasterTampa 更新时间:1/14/2019 访问量:13059
复制结构体以传递给函数 - 此字段不实现 'Copy' [duplicate]
Copy a struct to pass to a function - this field does not implement `Copy` [duplicate]
问:
这是我的结构:
#[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`
答:
6赞
phimuemue
1/13/2019
#1
如果一个类型实现了 ,“复制隐式发生”,即你不必显式声明你想要复制该值。因为 implements ,它不能实现,防止你在不知不觉中不小心复制了值。Copy
Vec
Drop
Copy
因此,只有 implements(如果包含的类型 implements ),以便您可以通过调用 显式复制向量。Vec
Clone
Clone
Clone
同样,你应该三思而后行,如果真的应该派生,或者如果你真的想派生,所以你必须明确声明你想要一个副本。ArimaModel
Copy
Clone
但是,如果您只想传入不同的函数,则可能需要借用它们(即 pass 或代替 )。ArimaModel
&ArimaModel
&mut ArimaModel
ArimaModel
评论
2赞
nickeb96
1/13/2019
您不能只为任何类型实现复制。它仅适用于基元和引用以及由可复制类型组成的结构/枚举。Op 的结构不是其中之一。Copy 对值进行逐字节复制,这不适用于具有堆分配的内容,例如 .Op 唯一的办法是每次将结构传递给函数时克隆他的结构,或者最好让他的函数引用。他/她也可以让他的结构包含 s 以外的内容。Vec
Vec
评论
Vec
不实现 .因此,您必须使用数组或传递引用。Copy
String
Vec