В следующем примере, я бы предпочел, чтобы присвоить значение для каждого поля в struct в декларации поля. Кроме того, он эффективно принимает одно дополнительное заявление по каждому полю присвоить значение поля. Все, что я хочу быть в состоянии сделать, это присвоить значение по умолчанию, когда структура инициализируется.
Есть ли более лаконичный способ сделать это?
struct cParams {
iInsertMax: i64,
iUpdateMax: i64,
iDeleteMax: i64,
iInstanceMax: i64,
tFirstInstance: bool,
tCreateTables: bool,
tContinue: bool,
}
impl cParams {
fn new() -> cParams {
cParams {
iInsertMax: -1,
iUpdateMax: -1,
iDeleteMax: -1,
iInstanceMax: -1,
tFirstInstance: false,
tCreateTables: false,
tContinue: false,
}
}
}
Вы можете задать значения по умолчанию для вашей структуры по реализации признака "по умолчанию". Функция по умолчанию
, как будет выглядеть ваша нынешняя "новая" функция:
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() };
С некоторыми незначительными изменениями в структуре данных, вы можете воспользоваться автоматически производной реализации по умолчанию. Если вы используете `#[вывести(по умолчанию)] на структуру данных, компилятор автоматически создаст функцию по умолчанию, которая заполняет каждое поле со значением по умолчанию. Булево значение по умолчанию равно false, то интегральное значение по умолчанию-0.
Целое число'значение S по умолчанию 0-это проблема, так как вы хотите, чтобы число полей, которые должны быть -1 по умолчанию. Можно определить новый тип, который реализует значение по умолчанию -1 и использовать, что вместо і64и в свои структуры. (Я не'т тестировал, но должно работать).
Однако, я'д предлагаю немного изменить свою структуру данных и использовать опцию <і64и>
вместо і64и
. Я не'т знаем контексте вашего кода, но, похоже, вы're, используя специальное значение -1, чтобы представлять особый смысл и"бесконечное и", или "там's нет максимум на". В Русте, мы используем "вариант", чтобы представлять дополнительно присутствует значение. Там's нет необходимости -1 взломать. Вариант может быть либо none
или некоторые(х)
где X будет вашим і64и здесь. Это может даже быть беззнаковое целое, если -1 было только отрицательное значение. Вариант по умолчанию `` значение
нет`, поэтому с предлагаемыми изменениями, ваш код может выглядеть следующим образом:
#[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() };