Ответ 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.)