Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何克隆长度大于32的阵列?_Arrays_Rust - Fatal编程技术网

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”的人,