আপনি 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 হয়।
আপনি পূর্ণসংখ্যার ক্ষেত্রগুলি -1 ডিফল্টরূপে করতে চান বলে একটি পূর্ণসংখ্যার ডিফল্ট মান 0 হওয়া এখানে একটি সমস্যা। আপনি একটি নতুন ধরণের সংজ্ঞা দিতে পারেন যা -1 এর একটি ডিফল্ট মান প্রয়োগ করে এবং i64এটি আপনার স্ট্রাক্টের পরিবর্তে ব্যবহার করতে পারে । (আমি এটি পরীক্ষা করিনি, তবে এটি কাজ করা উচিত)।
তবে আমি আপনার ডেটা কাঠামোটি সামান্য পরিবর্তন করার Option<i64>পরিবর্তে ব্যবহার করার পরামর্শ দেব i64। আমি আপনার কোডের প্রসঙ্গটি জানি না, তবে দেখে মনে হচ্ছে আপনি "অসীম", বা "সর্বাধিক কোনও নেই" উপস্থাপিত করার জন্য -1 এর বিশেষ মানটি ব্যবহার করছেন। মরচে, আমরা Optionএকটি বিকল্পভাবে উপস্থিত মান উপস্থাপন করতে ব্যবহার করি । -1 হ্যাকের দরকার নেই। একটি বিকল্প হয় হয় Noneবা Some(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() };