คุณสามารถระบุค่าเริ่มต้นสำหรับโครงสร้างของคุณได้โดยใช้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 เพื่อแทนความหมายพิเศษ "ไม่มีที่สิ้นสุด" หรือ "ไม่มีสูงสุด" ใน Rust เราใช้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() };