2013-05-26 17 views
10

Quale sarebbe il modo idiomatico di convertire array o vettori di un tipo in un altro in Rust? L'effetto desiderato èMatrici/vettori di tipo casting in Rust

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

ma non sono sicuro se lo stesso potrebbe essere raggiunto in modo più conciso, simile a scalari di tipo-cast.

Mi sembra di non riuscire a trovare indizi nel manuale o nel riferimento di Rust. TIA.

risposta

7

In generale, il meglio che si sta per ottenere è simile a quello che si ha (questo assegna un nuovo vettore):

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

Anche se, se si conoscono i modelli di bit delle cose che si sta casting tra sono uguali (ad es. una struttura newtype al tipo che esegue il wrapping o il casting tra uint e int), è possibile eseguire un cast sul posto, che non assegnerà un nuovo vettore (anche se non è possibile accedere al vecchio x):

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

(Si noti che questo è unsafe e può causare eventi anomali.)

+0

Grazie. Andare al solito modo funzionale e usare 'map' sarà abbastanza buono. –

Problemi correlati