Zgodnie z moją wiedzą, nie ma takiego skrótu. Ale masz kilka opcji.
Bezpośrednie składni
Bezpośrednie składni zainicjować szereg współpracuje z Copy
typów (całkowite są Copy
)
let array = [0; 1024];
inicjuje tablicę 1024 elementów ze wszystkimi 0s.
Na tej podstawie można następnie modyfikować tablicy:
let array = {
let mut array = [0; 1024];
array[0] = 7;
array[1] = 8;
array
};
Uwaga sztuczka z użyciem wyrażenia bloku do izolowania zmienność do mniejszej części kodu; użyjemy go poniżej.
Składnia iterator
Istnieje również wspierać zainicjować tablicę z iteratora:
let array = {
let mut array = [0; 1024];
for (i, element) in array.iter_mut().enumerate().take(2) {
*element = (i + 7);
}
array
};
I można nawet (opcjonalnie) zaczynają się od stanu niezainicjowanych, używając blok unsafe
:
let array = unsafe {
// Create an uninitialized array.
let mut array: [i32; 10] = mem::uninitialized();
let nonzero = 2;
for (i, element) in array.iter_mut().enumerate().take(nonzero) {
// Overwrite `element` without running the destructor of the old value.
ptr::write(element, i + 7)
}
for element in array.iter_mut().skip(nonzero) {
// Overwrite `element` without running the destructor of the old value.
ptr::write(element, 0)
}
array
};
Krótsza iterator składnia
Jest krótsza forma, na podstawie clone_from_slice
, to jednak obecnie niestabilny.
#![feature(clone_from_slice)]
let array = {
let mut array = [0; 32];
// Override beginning of array
array.clone_from_slice(&[7, 8]);
array
};