在Rust中将一种类型的数组或向量转换为另一种类型的惯用方法是什么?期望的效果是
let x = ~[0 as int,1 as int,2 as int]; let y = vec::map(x,|&e| { e as uint });
但我不确定是否可以以更简洁的方式实现相同的方式,类似于标量类型转换.
在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);
虽然,如果你知道你所投射的东西的位模式是相同的(例如,它包含的类型的newtype结构体,或者在uint和int之间的转换),你可以做一个就地转换,不会分配一个新的向量(虽然这意味着旧的x不能访问):
let x = ~[0i,2]; let y: ~[uint] = unsafe { cast::transmute(x) };
(请注意,这是不安全的,可能导致Bad Things发生.)