2017-02-07 5 views
6

downcast() जंग के Box प्रकार की विधि को कॉल साइट को बॉक्स इंस्टेंस के पूर्ण स्वामित्व की आवश्यकता होती है। ऐसा समकक्ष प्रतीत नहीं होता है जो उधारित संदर्भ के साथ काम कर सकता है। क्या इसका कोई कारण है? क्या कोई कामकाज है जो उधारित उदाहरण पर काम करेगा?उधारित बॉक्स

उत्तर

9

एक विकल्प है, लेकिन यह Box की विधि नहीं है: यह Any::downcast_ref() है। Deref coersion और Box es Deref -impl के लिए धन्यवाद, आप सीधे पर T के तरीकों को कॉल कर सकते हैं। इस प्रकार आप सीधे अपने Box<Any> पर Any::downcast_ref() कॉल कर सकते हैं:

let b: Box<Any> = Box::new(27u64); 

// The type of `ref_a` and `ref_b` is `&u64` 
let ref_a = b.downcast_ref::<u64>().unwrap(); 
let ref_b = b.downcast_ref::<u64>().unwrap(); 
println!("{} == {}", ref_a, ref_b); 

वहाँ भी एक परिवर्तनशील संदर्भ प्राप्त करने के लिए Any::downcast_mut() है।

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