arrays - 如何初始化大多数值相同但某些值不同的静态数组?

标签 arrays syntax static rust

我想使用静态或 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 个简单模式:

  1. 值(value),值(value),值(value),等等......
  2. 值;尺寸

所以,目前使用数组语法,你不能这样做。

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/

相关文章:

arrays - 如何提取具有多个条目的数组中的元素?

换行符后带有三个点的 python 字符串...这是什么东西?

python - 这段代码中是如何引用这个execute函数的?

java - 如何捕获静态初始化程序 block 中抛出的异常

python - 如何找到图像中的矩形

c - 这是释放作为结构一部分的多个动态分配数组的正确方法吗?

python - 一个 numpy 数组的 Softmax 函数

我可以在 C 中使用按位运算符而不是条件运算符吗?

c++ - 如何在类体内一次使用键/值创建映射(不是每次调用类中的函数时)

java - 将实例变量分配给静态变量