What would be the idiomatic way of converting arrays or vectors of one type to another in Rust? The desired effect is
let x = ~[0 as int, 1 as int, 2 as int];
let y = vec::map(x, |&e| { e as uint });
but I'm not sure if the same could be achieved in a more concise fashion, similar to scalar type-casts.
I seem to fail at finding clues in the Rust manual or reference. TIA.
In general, the best you are going to get is similar to what you have (this allocates a new vector):
let x = ~[0i, 1, 2];
let y = do x.map |&e| { e as uint };
// equivalently,
let y = x.map(|&e| e as uint);
Although, if you know the bit patterns of the things you are casting between are the same (e.g. a newtype struct to the type it wraps, or casting between uint
and int
), you can do an in-place cast, that will not allocate a new vector (although it means that the old x
can not be accessed):
let x = ~[0i, 1, 2];
let y: ~[uint] = unsafe { cast::transmute(x) };
(Note that this is unsafe
, and can cause Bad Things to happen.)