Предположим, что существует структура B
, подобная этой:
struct A {
/* ... */
}
struct B {
a: A,
b: u32,
c: i8,
/* ... */
z: usize
}
A
не имеет реализации Default
и не имеет значения по умолчанию, которое имеет смысл. Предположим, что b..z
все необходимо инициализировать по умолчанию (в данном случае 0), а A
- какому-либо значению времени выполнения. Это может выглядеть так:
let b = B {
a: some_a(), b: 0, c: 0, /* ... */ z: 0,
};
Очевидно, это не идеально. Хуже того, если бы к структуре было добавлено aa
, в инициализатор должен был быть добавлен еще один элемент. Использование ..Default::default()
не работает, потому что B
не имеет реализации Default
, потому что любые значения A
по умолчанию будут слишком дорогими для вычисления, чтобы потом просто их выбросить. Кроме того, в любом случае мне понадобится очень длинный инициализатор структуры в реализации Default
.
Есть ли способ установить оставшиеся элементы структуры в их значения по умолчанию (чтобы b
было установлено по умолчанию) из u32
) без записи всех имен членов?
РЕДАКТИРОВАТЬ: предпочтительно, чтобы при структурировании инициализаторов при добавлении новых членов было минимальное изменение. Это означает, что это не идеально:
let b = B {
a: some_a(),
b: Default::default(),
/* ... */
z: Default::default(),
};