Я хотел бы использовать статический или константный массив, но инициализировать его, используя что-то отличное от синтаксиса [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 ограничены элементами и хвостовыми выражениями. Я знаю, что если я заключу определение массива в скобки, то последняя строка или последнее выражение должны быть неявным возвращением.
Кроме того, у меня нет доступа к библиотеке std, но я не думаю, что сложная структура была бы необходима для чего-то такого простого - для индексации и получения значения.
Я посмотрел на правила макросов Rust и думаю, что это может быть решением, но все примеры, которые я видел, являются итеративными и инкрементальными.