2015-05-20 17 views
11

जंग पुस्तक का उल्लेख है कि "यह लगभग हमेशा एक टपल struct की तुलना में एक struct उपयोग करने के लिए बेहतर है।" नए प्रकार के पैटर्न के अलावा, क्या अनाम नाम रखने के कोई अन्य फायदे हैं? मुझे लगता है कि न्यूटाइप पैटर्न टुपल structs होने का एकमात्र उपयोगी मामला है।ट्यूपल structs के लिए कुछ उपयोग के मामले क्या हैं?

+3

एक अन्य उपयोग केस छोटी धर्मार्थ के गणितीय वैक्टर हैं। एक 2 डी या 3 डी वेक्टर प्रसंस्करण पुस्तकालय की तरह। यद्यपि आप वहां एक सरणी के लिए एक नया टाइप भी इस्तेमाल कर सकते हैं। –

उत्तर

28

वे एक-दूसरे के समान हैं।

को देखते हुए निम्नलिखित definitions

struct TupleStruct(i32, i32); 
struct NormalStruct{ a: i32, b: i32 } 

हम structs और टपल structs के उदाहरण के रूप में इस प्रकार है

let ts = TupleStruct(1, 2); 
let ns = NormalStruct { a: 1, b: 2}; 

// AFAIK, this shortcut to initialize the fields of a struct using the values of the fields 
// of another struct can't be done using tuple structs. 
let ns2 = NormalStruct {a: 5, ..ns}; 

कार्य के रूप में

let TupleStruct(x, y) = ts; 
println!("x: {}, y: {}", x, y); 

let NormalStruct {a, b} = ns; 
println!("a: {}, b: {}", a, b); 

एक टपल struct इस प्रकार काम का निर्माण कर सकते ' एस खेतों हे निहित नाम हैं (0, 1, ...)। इसलिए, क्षेत्रों तक पहुँचने यह लगभग हमेशा struct के क्षेत्र को स्पष्ट नाम आवंटित करने के स्पष्ट है के रूप में कम से कम प्रलेखन प्रयोजनों के लिए

println!("Accessing ns by name - {}{}", ns.a, ns.b); 
println!("accessing ts by name - {}{}", ts.0, ts.1); 

इस प्रकार किया जाता है,। यही कारण है कि जंग समुदाय में मैंने हमेशा एक सामान्य संरचना का उपयोग करने के लिए कई बहस देखी हैं।

हालांकि, ऐसे मामले हो सकते हैं जहां संरचना के क्षेत्र स्वाभाविक रूप से "अज्ञात" हैं, एक उल्लेखनीय मामला "न्यूटाइप" (एक फ़ील्ड के साथ टुपल स्ट्रक्चर) है जहां आप केवल एक आंतरिक प्रकार को लपेट रहे हैं।

उस स्थिति में, आंतरिक क्षेत्र का नामकरण तर्कसंगत रूप से कोई अतिरिक्त जानकारी प्रदान नहीं करता है।

struct Inches { inner: i32 } 

बनाम

struct Inches(i32) 

section on structs on the Rust book newtypes बारे में अधिक जानकारी नहीं है।

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