Rust中的类型转换数组/向量

Are*_*lis 13 arrays vector rust

在Rust中将一种类型的数组或向量转换为另一种类型的惯用方法是什么?期望的效果是

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

但是我不确定是否能以更简洁的方式实现同​​样的方式,类似于标量类型转换.

我似乎无法在Rust手册或参考资料中找到线索.TIA.

huo*_*uon 9

一般来说,你得到的最好的东西与你拥有的一样(这会分配一个新的向量):

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

虽然,如果你知道你在之间投射的东西的位模式是相同的(例如,它包装的类型的newtype结构,或者在uint和之间投射int),你可以进行就地演员,不会分配新的矢量(虽然这意味着旧的x无法访问):

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

(注意,这是unsafe,并且可能导致坏事发生.)

  • 看起来这个答案需要更新以适应较新版本的 Rust(例如,不再有“do”关键字,我认为你需要“.iter()”和“.collect()”在某个地方) (3认同)