Рассмотрим игровую площадку пример:
#[allow(dead_code)]
struct Things {
zero: usize,
one: usize,
...
nine: usize,
}
fn do_fancy_calculation() -> (usize, usize, usize, usize, usize) {
(1, 1, 1, 1, 1)
}
impl Things {
fn renew(&mut self) {
// does not work:
// let self {one, two, five, seven, eight} = do_fancy_calculation();
//
let (one, two, five, seven, eight) = do_fancy_calculation();
self.one = one;
self.two = two;
self.five = five;
self.seven = seven;
self.eight = eight;
}
}
fn main() {
let (zero, one, two, three, four, five, six, seven, eight, nine) =
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
let mut things = Things {
zero,
...
nine,
};
things.renew();
println!("{}", things.one);
}
Как мне приятно назначить one, two, five, seven, eight
, не прибегая к нескольким операторам типа self.x = y;
?
Я вызываю игрушечную ассоциированную функцию renew
, потому что в моем реальном случае использования структура представляет состояние чего-либо, и мне нужно обновить / обновить / воссоздать некоторые переменные для представления изменений в состоянии.Собираюсь ли я решить мой вариант использования неправильно?