Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.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 创建具有相同长度的数组_Arrays_Rust_Compile Time - Fatal编程技术网

Arrays 创建具有相同长度的数组

Arrays 创建具有相同长度的数组,arrays,rust,compile-time,Arrays,Rust,Compile Time,我正在写一些用Lodepeng rust写图像的东西,我想用像素而不是u8s。我已经创建了一个结构 struct Pixel {r: u8, g: u8, b: u8} 我用数组的元素构建一个u8s的数组。因为我现在是手工制作阵法,所以我现在的处境很奇怪,需要手工制作另一个阵法。有没有一种方法可以在编译时创建一个长度是像素数组长度三倍的数组?差不多 let data: [u8; other_array.len()*3]; 这不起作用,因为.len()不是编译时常量。在这种情况下,运行时成本对

我正在写一些用Lodepeng rust写图像的东西,我想用像素而不是
u8
s。我已经创建了一个结构

struct Pixel {r: u8, g: u8, b: u8}
我用数组的元素构建一个
u8
s的数组。因为我现在是手工制作阵法,所以我现在的处境很奇怪,需要手工制作另一个阵法。有没有一种方法可以在编译时创建一个长度是像素数组长度三倍的数组?差不多

let data: [u8; other_array.len()*3];
这不起作用,因为
.len()
不是编译时常量。在这种情况下,运行时成本对我来说并不重要,但如果我能将大小关联起来,它会感觉更干净(而且我将来可能需要性能)

编辑: 我使用的解决方案基于Levans的答案对于不手动初始化数组的用户,只需按照Levans操作即可。我手动初始化第一个数组,但将类型设置为使用
pixel\u count
中指定的长度,以便在编译时捕获错误的
pixel\u count
。我使用该常数创建第二个数组,然后断言长度具有正确的比率。我的最小示例如下所示:

struct Pixel {r: u8, g: u8, b: u8}
const pixel_count: usize = 4;

fn main() {
    let pixel_data = [Pixel; pixel_count] = [
        Pixel {r: 255, g: 0, b: 0},
        Pixel {r: 0, g: 255, b: 0},
        Pixel {r: 0, g: 0, b: 255},
        Pixel {r: 0, g: 99, b: 99},
    ];
    let mut data = [0u8; pixel_count*3];
    assert_eq!(pixel_data.len()*3, data.len());
}

创建与大小相关的数组的最简单方法是将初始大小存储为
const
项:它们是编译时常量:

const pixel_count: uint = 42;

struct Pixel { r: u8, g: u8, b: u8 }

fn main() {
    let pixels = [Pixel { r: 0, g: 0, b: 0 }, ..pixel_count];
    let raw_data = [0u8, ..pixel_count * 3];
    assert!(pixels.len() * 3 == raw_data.len());
}

您可能希望将
像素数
转换为
像素数
,以便它们匹配。无论如何,使用
断言使我使用的方法完美,谢谢!这在0.12.0中不再有效。你知道这是否是故意的吗?@DrYap确实,它已经改变了,关键字现在是
const
。谢谢