Подтвердить что ты не робот

Тип-литейные массивы/векторы в Rust

Каким будет идиоматический способ преобразования массивов или векторов одного типа в другой в Rust? Желаемый эффект

let x = ~[0 as int, 1 as int, 2 as int];
let y = vec::map(x, |&e| { e as uint });

но я не уверен, что то же самое можно было бы достичь более кратким образом, подобно скалярным типам.

Кажется, я не могу найти подсказки в руководстве Rust или ссылке. ТИА.

4b9b3361

Ответ 1

В общем, лучшее, что вы получите, похоже на то, что у вас есть (это выделяет новый вектор):

let x = ~[0i, 1, 2];
let y = do x.map |&e| { e as uint };
// equivalently,
let y = x.map(|&e| e as uint);

Хотя, если вы знаете, что битовые шаблоны вещей, которые вы бросаете между собой, одинаковы (например, структура newtype для типа, который она обертывает, или кастинг между uint и int), место размещения, которое не будет выделять новый вектор (хотя это означает, что старый x недоступен):

let x = ~[0i, 1, 2];
let y: ~[uint] = unsafe { cast::transmute(x) };

(Обратите внимание, что это unsafe и может привести к возникновению Bad Things.)