Интернеты говорят, что во-первых Rc<RefCell> не идиоматично для Rust (деревья правильно держать как банальные вектора, содержащие в себе вектора векторов). Во-вторых, я, в целом, всё правильно сделал.
После некоторого кумекания получилось вот так вот, и я не вижу как его сделать существенно компактнее. Может быть, можно уйти от Enum и бального true/false хватит?
Да, получилось.
Что меня смущает? Изобилие as_ref().cloned(). Ща буду думать...
После некоторого кумекания получилось вот так вот, и я не вижу как его сделать существенно компактнее. Может быть, можно уйти от Enum и бального true/false хватит?
Да, получилось.
fn mktree(source: &[Option<i32>]) -> Tree {
if source.is_empty() || source[0].is_none() {
return None;
}
let tree: Tree = new_tree(source[0].unwrap());
let mut buff = VecDeque::new();
buff.push_back((tree.as_ref().cloned(), false));
for val in source[1..].into_iter() {
let subtree = val.and_then(|val| {
let subtree = new_tree(val);
buff.push_back((subtree.as_ref().cloned(), false));
subtree
});
let (node, is_last) = buff.pop_front().unwrap();
if is_last {
node.unwrap().borrow_mut().right = subtree;
} else {
node.as_ref().unwrap().borrow_mut().left = subtree;
buff.push_front((node.as_ref().cloned(), true));
}
}
tree
}
Что меня смущает? Изобилие as_ref().cloned(). Ща буду думать...
no subject
Date: 2022-12-24 03:42 pm (UTC)Будут ли платить за раст? Конечно будут, пока не напишут другой бред сивой кобылы, за который заплатят больше!
Что касается души, то не продавайте ее дьяволу за бесценок!
no subject
Date: 2022-12-24 08:18 pm (UTC)Пока что я свою карьеру всегда поворачивал в сторону интересного, а потом оказывалось, что за это больше платят. Если бы я слушался людей и делал то, что нужно бизнесу здесь-и-сейчас, то я сначала бы выучил 1С и был бы гуру виндовых серверов с видеонаблюдением, ip-телефонии и бы мастером chef'а. Но всё это мне не понравилось и я его скипнул. Так же как скипнул "некрасивый" перл с powershell и ровно так же как сейчас меня не особо вдохновляет тераформ.
no subject
Date: 2022-12-24 08:27 pm (UTC)no subject
Date: 2022-12-24 09:54 pm (UTC)Спасибо за предсказания, но я со своей карьерой как-нибудь сам разберусь, чай не первый десяток лет занимаюсь.
no subject
Date: 2022-12-24 11:20 pm (UTC)no subject
Date: 2022-12-25 02:50 am (UTC)Ты немного заблуждаешься. Платят тебе больше из-за того, что тебе интересно. Я в том смысле - что ты всё делаешь правильно. :)
no subject
Date: 2022-12-25 12:44 pm (UTC)Ну, я понимаю, что это становится конкурентным преимуществом, но я в целом, смотрю на индустрию - масса тоскливых тенхологий просто не взлетела или умерла. Тот же шеф, от него пахло дурным инжинирингом. Как только я увидел из chef-sdk, 600Мб deb-файл с несколькими завенодоренными копиями erlang'а, мне стало настолько неприятно, что я его скипнул, хотя и были объективные причины учить. Итог - progressive.
Вот сейчас мне так же неприятно от того, куда катится вся это ямло-кодла.
no subject
Date: 2022-12-25 01:13 pm (UTC)no subject
Date: 2022-12-25 01:30 pm (UTC)А при чём systemd-то? Он взял на себя огромный кусок легаси, и реализация в systemd - отличная. За годы работы с ним, я знаю единицы багов, и ни одного архитектурного бага вида "ну не предусмотрели". В целом, systemd/networkd - отличные штуки. timesyncd - сложнее, но 90% проблем проистекает из-за того, что он не сервер и его трудно мониторить на актуальность.
Вот на конструкции с оверлейными образами от вендоров я смотрю с опаской и недоверием, это да.
no subject
Date: 2022-12-25 03:04 pm (UTC)