2017-07-10 11 views
8

मैं एक जंग पुस्तकालय में अपने खुद के प्रकार को परिभाषित है, तो तरह कहते हैं:जंग में डिफॉल्ट कन्स्ट्रक्टर को अक्षम करें?

struct Date { 
    year: u16, 
    month: u8, 
    day: u8 
} 

impl Date { 
    fn new(y: u16, m: u8, d: u8) -> Date { 
     // Do some validation here first 
     Date { year: y, month: m, day: d } 
    } 
} 

वहाँ के लिए एक रास्ता की आवश्यकता होती है उपयोगकर्ताओं Date::new निर्माता का उपयोग करने के है? दूसरे शब्दों में, मैं किसी भी तरह तो जैसे डिफ़ॉल्ट निर्माता के साथ अपने स्वयं दिनांक struct बनाने जाने पर प्रतिबंध लगाने कर सकते हैं:

let d = Date { 2017, 7, 10 }; 

मैं पूछता हूँ, क्योंकि यह अगर आप एक के माध्यम से उनके तर्कों को चलाने के लिए डेवलपर्स के लिए मजबूर नहीं कर सकते हैं एक हानिकारक दोष प्रतीत हो रहा है एक संरचना के सदस्यों को स्थापित करने से पहले सत्यापन की बैटरी। (हालांकि, शायद कुछ अन्य पैटर्न हैं जिन्हें मुझे जंग में उपयोग करना चाहिए, जैसे डेटा का सत्यापन करने के बजाए उनका उपयोग किया जाता है; उस पर टिप्पणी करने के लिए स्वतंत्र महसूस करें।)

+3

इसे सामान्यतः "डिफ़ॉल्ट कन्स्ट्रक्टर" नहीं कहा जाएगा; इसका अर्थ 'दिनांक :: डिफ़ॉल्ट' (['डिफ़ॉल्ट 'विशेषता] से होगा (https://doc.rust-lang.org/std/default/trait.Default.html))। मैं शायद यह "संरचना शाब्दिक वाक्यविन्यास" कहूंगा। – Shepmaster

उत्तर

9

टीएल; डीआर: "डिफ़ॉल्ट कन्स्ट्रक्टर "पहले से ही डिफ़ॉल्ट रूप से अक्षम है।

struct वाक्य रचना केवल जो सभीstruct के क्षेत्रों के लिए उपयोग के लिए उपलब्ध है।

नतीजतन, यह गोपनीयता नियमों के अनुसार, उसी मॉड्यूल में केवल पहुंच योग्य है, जब तक कि सभी फ़ील्ड pub चिह्नित न हों, जहां struct है, जहां भी यह पहुंच योग्य है।

नोट है कि एक ही कार्यों का सच है, new के बाद से यहां pub चिह्नित नहीं है, यह किसी भी मौजूदा से अन्य मॉड्यूल के लिए दुर्गम है।

+0

आह! अति उत्कृष्ट। धन्यवाद महोदय! –

+0

@ जोनाथन विल्बर: आपका स्वागत है :) –

+0

@ 8 बिट्ट्री: नहीं, यह एक जब तक है। मुझे इसे थोड़ा और योग्य बनाने दें। –

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

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