我想使用静态或 const 数组,但使用 [T; 以外的东西对其进行初始化; N]
语法。我需要定义特定元素,但所有其他值都可以默认为 0 或其他一些值。
在 C 中,您可以执行以下操作:
byte ARRAY[256] = {
[0x1F] = (1 << 4),
// Or even simply just this
[0x46] '\n'
};
我尝试了一些类似的方法:
static ARRAY: [u8; 256] = {
// x is some arbitrary number of elements
let mut array = [0, x];
array[i] = 'b',
array[j] = 'a',
array[k] = 'd',
array
};
这只是基于我知道适用于本地数组声明的语法的反复试验。这会引发编译器错误,指出 const 和 static 中的 block 仅限于项目和尾部表达式。我知道如果我将数组定义括在方括号中,那么最后一行或最后一个表达式必须是隐式返回。
此外,我无权访问 std 库,但我认为对于这种简单的事情(索引和获取值)来说不需要复杂的结构。
我查看了 Rust 宏规则并认为这可能是一个解决方案,但我看到的所有示例都是迭代和增量的。
最佳答案
没有与您的 C 代码段等效的 Rust。 documentation显示只允许使用 3 个简单模式:
- 空
- 值(value),值(value),值(value),等等......
- 值;尺寸
所以,目前使用数组语法,你不能这样做。
RFC关于 const 函数现在允许:
static ARRAY: [u8; 256] = {
let mut array = [0; 256];
array[0] = b'b';
array[1] = b'a';
array[2] = b'd';
array
};
现在,让我们看一下声明式宏解决方案。没有办法“计数”,有一些技巧但不会走得太远。 proc 宏可以工作。
您也可以在编译前使用其他工具生成文件。例如,您可以使用 Cargo 到 generate the file编译前。
关于arrays - 如何初始化大多数值相同但某些值不同的静态数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50283865/