2013-05-26 10 views
10

Jaki byłby idiomatyczny sposób przekształcania tablic lub wektorów jednego rodzaju na inny w Rust? Pożądany efekt jestMacierze/wektory do odlewania w Rust

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

ale nie jestem pewien, czy to samo można osiągnąć w bardziej zwięzły sposób, podobny do skalarnych typu odlewów.

Nie udaje mi się znaleźć wskazówek w podręczniku Rust lub odnośniku. TIA.

Odpowiedz

7

Ogólnie najlepszy masz zamiar dostać się jest podobny do tego, co masz (to przydziela nowy wektor):

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

Chociaż, jeśli znasz wzorce bitowe rzeczy, które są odlewy między są takie same (np. struktura nowego typu do typu, który otacza, lub rzutowanie między uint i int), możesz wykonać rzut lokalny, który nie przydzieli nowego wektora (chociaż oznacza to, że nie można uzyskać dostępu do starej wersji x):

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

(Należy pamiętać, że jest to unsafe i może powodować wystąpienie Złych rzeczy.)

+0

Dziękuję. Używanie zwykłej funkcjonalności i używanie 'mapy' będzie wystarczająco dobre. –