Я пишу что-то, что пишет изображения с lodepng-ржавчиной, и я хотел бы работать с пикселями вместо u8
. Я создал на структуруСоздать массив с одинаковой длиной
struct Pixel {r: u8, g: u8, b: u8}
и строй массива u8
с из элементов массива. Поскольку я сейчас делаю массив вручную, я в странной ситуации нуждаюсь в том, чтобы сделать другой массив вручную. Есть ли способ создать массив, который в три раза больше длины массива пикселей во время компиляции? Что-то вроде
let data: [u8, ..other_array.len()*3];
Который не работает, потому что .len()
не является константой времени компиляции. В этом случае стоимость исполнения не имеет для меня значения, но если бы у меня были связанные размеры, она бы стала чище (и мне может понадобиться производительность в будущем).
Редактировать: Решение, которое я использую, основано на ответе Леванса. Для людей, не инициализирующих ваш массив вручную, просто следуйте за Леванами. Я инициализирую свой первый массив вручную, но задаю тип, чтобы использовать длину, указанную в pixel_count
, так что она поймает неправильный pixel_count
во время компиляции. Я создаю второй массив с этой константой, а затем утверждаю, что длины имеют правильное соотношение. Мой минимальный пример выглядит следующим образом:
struct Pixel {r: u8, g: u8, b: u8}
static pixel_count : uint = 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!(pixel_data.len()*3 == data.len());
}
Возможно, вы захотите сделать 'pixel_number' в' pixel_count', чтобы они совпадали. В любом случае, используя 'assert !', метод, который я использую, отлично, спасибо! – porglezomp
Это больше не работает в 0.12.0. Вы знаете, что это намеренно? – DrYap
@DrYap Действительно, он изменился, ключевое слово теперь 'const'. Благодаря ! – Levans