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.
一般来说,你得到的最好的东西与你拥有的一样(这会分配一个新的向量):
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,并且可能导致坏事发生.)