15

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

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

但我不确定是否可以以更简洁的方式实现相同的效果,类似于标量类型转换。

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

4

1 回答 1

10

一般来说,你将得到的最好的与你所拥有的相似(这会分配一个新的向量):

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

虽然,如果您知道要转换的事物的位模式是相同的(例如,将 newtype 结构转换为它包装的类型,或者在uintand之间转换int),您可以进行就地转换,这不会分配新的向量(虽然这意味着旧的x无法访问):

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

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

于 2013-05-26T04:49:47.287 回答