Sie können Standardwerte für Ihre Struktur angeben, indem Sie das Default
Merkmal implementieren . Die default
Funktion würde wie Ihre aktuelle new
Funktion aussehen :
impl Default for cParams {
fn default() -> cParams {
cParams {
iInsertMax: -1,
iUpdateMax: -1,
iDeleteMax: -1,
iInstanceMax: -1,
tFirstInstance: false,
tCreateTables: false,
tContinue: false,
}
}
}
Sie können die Struktur dann instanziieren, indem Sie nur die nicht standardmäßigen Werte angeben:
let p = cParams { iInsertMax: 10, ..Default::default() };
Mit einigen geringfügigen Änderungen an Ihrer Datenstruktur können Sie eine automatisch abgeleitete Standardimplementierung nutzen. Wenn Sie #[derive(Default)]
eine Datenstruktur verwenden, erstellt der Compiler automatisch eine Standardfunktion für Sie, die jedes Feld mit seinem Standardwert füllt. Der Standard-Boolesche Wert ist false, der Standard-Integralwert ist 0.
Der Standardwert einer Ganzzahl von 0 ist hier ein Problem, da die Ganzzahlfelder standardmäßig -1 sein sollen. Sie können einen neuen Typ definieren, der einen Standardwert von -1 implementiert, und diesen anstelle i64
Ihrer Struktur verwenden. (Ich habe das nicht getestet, aber es sollte funktionieren).
Ich würde jedoch vorschlagen, Ihre Datenstruktur geringfügig zu ändern und Option<i64>
stattdessen zu verwenden i64
. Ich kenne den Kontext Ihres Codes nicht, aber es sieht so aus, als würden Sie den speziellen Wert -1 verwenden, um die spezielle Bedeutung "unendlich" oder "es gibt kein Maximum" darzustellen. In Rust verwenden wir a Option
, um einen optional vorhandenen Wert darzustellen. Es ist kein -1-Hack erforderlich. Eine Option kann entweder sein None
oder Some(x)
wo x Ihr i64
hier sein würde. Es könnte sogar eine Ganzzahl ohne Vorzeichen sein, wenn -1 der einzige negative Wert wäre. Der Standardwert Option
ist None
. Mit den vorgeschlagenen Änderungen könnte Ihr Code folgendermaßen aussehen:
#[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() };
struct Foo { val: i64 = 0 }
) vorgeschlagen und können daher in späteren Versionen erscheinen.Default
für eine Struktur Standardeinstellungen für alle Felder definiert werden ?