2013-05-26 14 views
10

Was wäre die idiomatische Art, in Rust Arrays oder Vektoren eines Typs in einen anderen umzuwandeln? Der gewünschte Effekt istTyp-Casting Arrays/Vektoren in Rust

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

aber ich bin nicht sicher, ob das gleiche in einer prägnanten Art und Weise, ähnlich wie bei skalaren Typ-Casts erreicht werden kann.

Ich scheitere darin, Hinweise in der Rust Handbuch oder Referenz zu finden. TIA.

Antwort

7

Im Allgemeinen ist die beste Sie erhalten werden, ist ähnlich dem, was Sie haben (dies weist einen neuen Vektor):

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

Obwohl, wenn Sie kennen die Bitmuster der Dinge, die Sie werfen zwischen sind die gleichen (z. B. eine newtype-Struktur zu dem Typ, den es umschließt, oder Gießen zwischen uint und int), können Sie eine In-Place-Besetzung, die einen neuen Vektor nicht zuordnen (obwohl es bedeutet, dass die alten x kann nicht zugegriffen werden):

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

(Beachten Sie, dass dies unsafe ist und dazu führen kann, dass "Bad Things" passieren.)

+0

Vielen Dank. Gehen Sie die übliche funktionale Art und mit 'map' wird gut genug sein. –