在 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
and之间转换int
),您可以进行就地转换,这不会分配新的向量(虽然这意味着旧的x
无法访问):
let x = ~[0i, 1, 2];
let y: ~[uint] = unsafe { cast::transmute(x) };
(请注意,这是unsafe
,并且可能导致坏事发生。)