Özelliği uygulayarak yapınız için varsayılan değerler sağlayabilirsiniz Default
. default
Fonksiyon mevcut gibi görünecektir new
fonksiyonu:
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 i64
yapı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, Option
isteğ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 None
da 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 Option
değ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() };