나는 lodepng-rust로 이미지를 쓰고 있는데, u8
대신 픽셀로 작업하고 싶습니다. 나는 구조체동일한 길이의 배열 만들기
struct Pixel {r: u8, g: u8, b: u8}
을 만든 및 배열의 요소 중 u8
의 배열을 구축하고있다. 제가 지금 손으로 배열을 만들고 있기 때문에 저는 다른 배열을 손으로 만들 필요가있는 이상한 상황에 처해 있습니다. 컴파일 할 때 픽셀 배열의 길이의 세 배가되는 배열을 만들 수있는 방법이 있습니까? .len()
때문에 작동하지 않습니다
let data: [u8, ..other_array.len()*3];
같은 뭔가 컴파일 시간 상수가 아닙니다. 런타임 비용은이 경우에는별로 중요하지 않지만 관련된 크기를 가질 수 있다면 클리너가 느껴질 것입니다 (그리고 앞으로는 성능이 필요할 수도 있습니다).
편집 : 해결책은 Levans의 답변을 기반으로합니다. 배열을 수동으로 초기화하지 않는 사람들은 Levans를 따르십시오. 첫 번째 배열을 직접 초기화하지만 pixel_count
에 지정된 길이를 사용하도록 형식을 설정하면 컴파일시에 pixel_count
을 잘못 catch합니다. 그 상수를 가진 두 번째 배열을 만들고 길이가 올바른 비율이라고 주장합니다. 내 최소한의 예는 다음과 같습니다
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