आप Default
विशेषता को लागू करके अपनी संरचना के लिए डिफ़ॉल्ट मान प्रदान कर सकते हैं । default
समारोह अपने वर्तमान कैसा दिखेगा new
समारोह:
impl Default for cParams {
fn default() -> cParams {
cParams {
iInsertMax: -1,
iUpdateMax: -1,
iDeleteMax: -1,
iInstanceMax: -1,
tFirstInstance: false,
tCreateTables: false,
tContinue: false,
}
}
}
तब आप केवल गैर-डिफ़ॉल्ट मान देकर संरचना को तुरंत बदल सकते हैं:
let p = cParams { iInsertMax: 10, ..Default::default() };
आपकी डेटा संरचना में कुछ छोटे बदलावों के साथ, आप स्वतः व्युत्पन्न डिफ़ॉल्ट कार्यान्वयन का लाभ उठा सकते हैं। यदि आप #[derive(Default)]
डेटा संरचना पर उपयोग करते हैं, तो कंपाइलर आपके लिए एक डिफ़ॉल्ट फ़ंक्शन बनाएगा जो प्रत्येक फ़ील्ड को उसके डिफ़ॉल्ट मान से भरता है। डिफ़ॉल्ट बूलियन मान गलत है, डिफ़ॉल्ट अभिन्न मान 0 है।
पूर्णांक का डिफ़ॉल्ट मान 0 होना यहां एक समस्या है क्योंकि आप चाहते हैं कि पूर्णांक फ़ील्ड डिफ़ॉल्ट रूप से -1 हो। आप एक नए प्रकार को परिभाषित कर सकते हैं जो -1 के डिफ़ॉल्ट मान को लागू करता है और i64
आपकी संरचना में इसके बजाय इसका उपयोग करता है । (मैंने ऐसा परीक्षण नहीं किया है, लेकिन यह काम करना चाहिए)।
हालाँकि, मैं आपके डेटा संरचना को बदलने और Option<i64>
इसके बजाय उपयोग करने का सुझाव दूंगा i64
। मुझे आपके कोड का संदर्भ नहीं पता है, लेकिन ऐसा लगता है कि आप विशेष अर्थ "अनंत" का प्रतिनिधित्व करने के लिए -1 के विशेष मूल्य का उपयोग कर रहे हैं, या "कोई अधिकतम नहीं है"। जंग में, हम Option
वैकल्पिक रूप से मौजूद मूल्य का प्रतिनिधित्व करने के लिए एक का उपयोग करते हैं। -1 हैक के लिए कोई ज़रूरत नहीं है। एक विकल्प None
या तो हो सकता है या Some(x)
जहां x आपके i64
यहां होगा। यह भी एक अहस्ताक्षरित पूर्णांक हो सकता है अगर -1 केवल नकारात्मक मूल्य था। डिफ़ॉल्ट Option
मान है None
, इसलिए प्रस्तावित परिवर्तनों के साथ, आपका कोड इस तरह दिख सकता है:
#[derive(Default)]
struct cParams {
iInsertMax: Option<u64>,
iUpdateMax: Option<u64>,
iDeleteMax: Option<u64>,
iInstanceMax: Option<u64>,
tFirstInstance: bool,
tCreateTables: bool,
tContinue: bool,
}
let p = cParams { iInsertMax: Some(10), ..Default::default() };