172 похожих чатов

Привет, изучаю раст, столкнулся с тем как лучше захендлить опциональные

вещи. Написал код ниже, это кусочек решения для задачи с литкода, сначала я написал fn overflow через анвреп с дефолтом, но из-за того что я пока не до конца понимаю владение, влепил клон (т.к. это бокс то по идее клониться будет весь хвост линкед листа что не круто), плюс нужна имплементация дефолт, потом я подумал как бы избавиться от него, и придумал влепить вместо этой конструкции еще один матч. Я хочу понять какое решение более "идеоматическое" и в целом более грамотное, почему, можно ли сделать лучше (в конструкции с матч меня как то коробит что два разных вызова конструктора ноды хотя код выглядит чисто). Может быть как-то можно переписать вариант типа анврепа только без клонирования и покрасивее?

* для контекста, функция приводит лист типа [1, 10, 9, 1] к [1, 9, 0, 2]

rust

#[derive(PartialEq, Eq, Clone, Debug)]
pub struct ListNode {
pub val: i32,
pub next: Option<Box<ListNode>>,
}

type Node = Option<Box<ListNode>>;

impl Default for Box<ListNode> {
fn default() -> Self {
Box::new(ListNode::new(0))
}
}

fn node(val: i32, next: Node) -> Node {
Some(Box::new(ListNode { val, next }))
}

/// using unwrap and clone
fn overflow(l: Node) -> Node {
match l {
None => None,
Some(b) if b.val < 10 => Some(b),
Some(b) => node(
b.val - 10,
overflow(node(
b.next.clone().unwrap_or_default().val + 1,
b.next.unwrap_or_default().next)),
),
}
}

/// using match
fn overflow(l: Node) -> Node {
match l {
None => None,
Some(b) if b.val < 10 => Some(b),
Some(b) => node(
b.val - 10,
overflow(match b.next {
None => node(1, None),
Some(next) => node(next.val + 1, next.next),
}),
),
}
}

7 ответов

27 просмотров

а оно вообще работает? Или ты написал просто как хочешь чтобы было

izucken- Автор вопроса
Αλεχ Zhukovsky
а оно вообще работает? Или ты написал просто как х...

работает корректно, разница в производительности в пределах погрешности (ну на литкоде...)

izucken
работает корректно, разница в производительности в...

https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=42171403097f777a3e9355856b4d2e34 ну вот я посмотрел - как было 1 10 9 1 так и осталось

izucken- Автор вопроса
Αλεχ Zhukovsky
а оно вообще работает? Или ты написал просто как х...

я немного не так описал функцию, т.к. это часть решения, но вопрос у меня все же больше про то как работать с опциями

у тебя получается ерунда потому что линкед листы так никто не описывает. А так второй способ с матчем достаточно идеоматичный

izucken- Автор вопроса
Αλεχ Zhukovsky
у тебя получается ерунда потому что линкед листы т...

ну листы такие автор задачи дает т.ч. не поспоришь )

izucken- Автор вопроса

Похожие вопросы

Обсуждают сегодня

#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
Гляньте, че бывает: Сегодня по одному проекту одной вебстудии делал проект небольшой, на их хостинге. На Modx revo. В определенный момент , работая в админке, вдруг перестал р...
Artem
7
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
12
> Копаем глубже > Следующий момент был, когда я спросил его, знает ли он JavaScript. Он ответил, что его учили работать с C#. Я тоже в университете писал на C#, но даже там мн...
Oleg Volkov
4
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
Карта сайта