Özelliği uygulayarak yapınız için varsayılan değerler sağlayabilirsiniz Default. defaultFonksiyon mevcut gibi görünecektir newfonksiyonu:
impl Default for cParams {
fn default() -> cParams {
cParams {
iInsertMax: -1,
iUpdateMax: -1,
iDeleteMax: -1,
iInstanceMax: -1,
tFirstInstance: false,
tCreateTables: false,
tContinue: false,
}
}
}
Daha sonra yapıyı yalnızca varsayılan olmayan değerleri vererek başlatabilirsiniz:
let p = cParams { iInsertMax: 10, ..Default::default() };
Veri yapınızdaki bazı küçük değişikliklerle, otomatik olarak türetilmiş bir varsayılan uygulamadan yararlanabilirsiniz. Eğer kullanırsanız #[derive(Default)]veri yapısı üzerinde, derleyici otomatik olarak varsayılan değeri ile her alanı doldurur sizin için bir varsayılan işlevi yaratacaktır. Varsayılan boole değeri false, varsayılan integral değeri 0'dır.
Tamsayı alanlarının varsayılan olarak -1 olmasını istediğiniz için bir tamsayının varsayılan değerinin 0 olması bir sorundur. Varsayılan -1 değerini uygulayan yeni bir tür tanımlayabilir ve i64yapınız yerine bunu kullanabilirsiniz . (Bunu test etmedim ama işe yaramalı).
Ancak, veri yapınızı biraz değiştirmenizi ve Option<i64>bunun yerine kullanmanızı öneririm i64. Kodunuzun bağlamını bilmiyorum, ancak "sonsuz" veya "maksimum yok" özel anlamını temsil etmek için özel -1 değerini kullanıyorsunuz gibi görünüyor. Rust'ta, Optionisteğe bağlı olarak mevcut bir değeri temsil etmek için bir kullanırız. -1 hack'e gerek yoktur. Bir seçenek, ya Noneda Some(x)burada x'in sizin olabileceği yer olabilir i64. Tek negatif değer -1 ise, işaretsiz bir tamsayı bile olabilir. Varsayılan Optiondeğer şudur None, bu nedenle önerilen değişikliklerle kodunuz şöyle görünebilir:
#[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() };