जंग 1.14 में, Index
trait इस प्रकार परिभाषित किया गया है:`इंडेक्स` विशेषता का` Idx` प्रकार पैरामीटर क्यों अनसुलझा होने की अनुमति है?
pub trait Index<Idx> where Idx: ?Sized {
type Output: ?Sized;
fn index(&self, index: Idx) -> &Self::Output;
}
निहित Sized
Output
प्रकार के लिए बाध्य ?Sized
यहाँ के साथ आराम है। जो समझ में आता है, क्योंकि index()
विधि Output
का संदर्भ देता है। इस प्रकार, अनसुलझा प्रकारों का उपयोग किया जा सकता है, जो उपयोगी है; उदाहरण:
impl<T> Index<Range<usize>> for Vec<T> {
type Output = [T]; // unsized!
fn index(&self, index: Range<usize>) -> &[T] { … } // no problem: &[T] is sized!
}
Idx
प्रकार पैरामीटर का अंतर्निहित बाध्य भी आराम है और अनवधि जा सकता है। लेकिन Idx
का उपयोग विधि तर्क के रूप में किया जाता है और अनसुलझा प्रकारों का उपयोग करके तर्क संभव नहीं है AFAIK। Idx
क्यों अनसुलझा होने की अनुमति है?
सामान्य रूप से महान उत्तर! – mcarton
* किसी भी बात की बात है कि किसी दिन, हम मूल्य से गतिशील रूप से आकार (डीएसटी) पारित करना चाहते हैं, हालांकि मुझे समझ में नहीं आता कि कैसे। * => भाषा और कार्यान्वयन के बीच एक अंतर है। सिर्फ इसलिए कि भाषा इसे एक कदम (मूल्य से गुजरती) मानती है कि इसका मतलब यह नहीं है कि एबीआई स्तर पर मूल्य सूचक द्वारा पारित नहीं किया जाता है। और इस प्रकार यह पूरी तरह से समझदार है कि भाषा को वास्तविक कार्यान्वयन के साथ मूल्यों द्वारा डीएसटी पास किया जा रहा है कि एक सूचक का उपयोग किया जाता है। मूल्य से उन्हें वापस लौटना, हालांकि, trickier लगता है :) –