Arrays 如何克隆长度大于32的阵列?
本机类型(或实现Arrays 如何克隆长度大于32的阵列?,arrays,rust,Arrays,Rust,本机类型(或实现Copytrait的类型)的固定长度数组可以在Rust中克隆,长度可达32。也就是说,这将编译: fn main() { let source: [i32; 32] = [0; 32]; // length 32 let _cloned = source.clone(); } 但这并不是: fn main() { let source: [i32; 33] = [0; 33]; // length 33 let _cloned = source.
Copy
trait的类型)的固定长度数组可以在Rust中克隆,长度可达32。也就是说,这将编译:
fn main() {
let source: [i32; 32] = [0; 32]; // length 32
let _cloned = source.clone();
}
但这并不是:
fn main() {
let source: [i32; 33] = [0; 33]; // length 33
let _cloned = source.clone(); // <-- compile error
}
fn main(){
let source:[i32;33]=[0;33];//长度33
让_clone=source.clone();//您不能在自己的代码中添加impl clone
。这个问题会在某个时候得到解决,同时您可以通过不同的努力解决它:
- 如果您只有一个具体类型的局部变量,并且该类型是
Copy
(如您的示例所示),那么您可以简单地复制而不是克隆,即let\u cloned=source;
- 如果数组是要为其实现
克隆
的结构的字段(并且派生
将不起作用),则仍然可以手动实现克隆
,并在实现中使用上述技巧
- 克隆非
复制
类型的数组更为棘手,因为克隆
可能会失败。您可以根据需要多次写出[x[0].Clone(),x[1].Clone(),…]
,这需要大量工作,但至少肯定是正确的
- 如果所有其他方法都失败了,您仍然可以创建一个新的类型包装器。这需要相当多的样板文件来委托您需要的所有其他特性,但是您可以(再次,手动)实现
克隆
自Rust 1.21.0以来,您可以克隆任意长度的阵列。该版本的“库”部分说:
为T:Clone
在这种情况下,您不能使用Vec
有什么原因吗?对于任何其他使用“WTF”的人,