2013-05-26 14 views
10

में वैक्टर जंग में एक और करने के लिए सरणियों या एक प्रकार का वैक्टर परिवर्तित करने की मुहावरेदार तरीका होगा क्या? वांछित प्रभावप्रकार कास्टिंग सरणियों/जंग

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

है, लेकिन मुझे यकीन है कि अगर एक ही अधिक संक्षिप्त फैशन, अदिश प्रकार डाले के समान में प्राप्त किया जा सकता नहीं हूँ।

मैं जंग मैनुअल या संदर्भ में सुराग खोजने में असफल रहे हैं। TIA।

उत्तर

7

सामान्य में, सबसे अच्छा आप प्राप्त करने जा रहे हैं आप (यह एक नया वेक्टर आवंटित करती है) के समान है:

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

हालांकि, आप चीजों को आप के बीच कास्ट कर रहे हैं के बिट पैटर्न पता है एक ही हैं (जैसे प्रकार यह लपेटता, या कास्टिंग uint और int के बीच करने के लिए एक newtype struct), तो आपको एक में जगह डाली, कि एक नए वेक्टर आवंटित नहीं होगा क्या कर सकते हैं (हालांकि यह मतलब है कि वर्ष x पहुँचा नहीं जा सकता):

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

(ध्यान दें कि यह unsafe है, और तो होना ही बैड थिंग्स हो सकता है।)

+0

धन्यवाद। हमेशा की तरह कार्यात्मक रास्ते पर जा रहा है और का उपयोग कर 'map' काफी अच्छा हो जाएगा। –

संबंधित मुद्दे