Size: a a a

2020 October 22

k

kalan in Rust Beginners
Dmitry
Ну как бы да, это видимо из какой-то теории, в отрыве от контекста не понятно о чем речь. Типов может не быть вообще, перечисление может быть просто enum modes {single, plural} - где в рантайме скорее всего какой-нибудь один инт будет передаваться на весь енум и будем смотреть, какое в ном значение.
Не понятно, что значит "типов может не быть". В примере и single и plural и тем более modes являются типами
источник

D

Dmitry in Rust Beginners
Верно, я имел в виду что под ними структур данных не будет в работающей программе.
источник

JC

Julian =) Coffee in Rust Beginners
как и под "структурами данных"
источник

JC

Julian =) Coffee in Rust Beginners
там будет просто чуть более длинный инт
источник
2020 October 23

MF

Mattew Fleuz in Rust Beginners
Есть вариант скрестить два &[u8] в один без копирования средствами стандартной либы, при условии что они гарантированно не пересекаются?
источник

IB

Ilya Bogdanov in Rust Beginners
Нельзя
источник

IB

Ilya Bogdanov in Rust Beginners
Слайс - всегда непрерывный участок памяти
источник

V

Vitaliy in Rust Beginners
ну если после скрещивания тебя устроит на выходе итератор, то в общем-то можно
источник

MB

Mikail Bagishov in Rust Beginners
Скорее всего, самое разумное поведение это создать новый вектор из старых слайсов.
источник

IB

Ilya Bogdanov in Rust Beginners
Mikail Bagishov
Скорее всего, самое разумное поведение это создать новый вектор из старых слайсов.
без аллокаций и копирования так нельзя
источник

IB

Ilya Bogdanov in Rust Beginners
Vitaliy
ну если после скрещивания тебя устроит на выходе итератор, то в общем-то можно
Да, метод chain
источник

MB

Mikail Bagishov in Rust Beginners
Ilya Bogdanov
без аллокаций и копирования так нельзя
Да, но скорее всего сойдет
источник

IB

Ilya Bogdanov in Rust Beginners
Понятное дело что в 99% задач сойдет, в изначальном вопросе просто написано "без копирования", я из этого исходил
источник

MB

Mikail Bagishov in Rust Beginners
А еще там было написано "сцепить два слайса в один", а это попросту невозможно. Так что в любом случае мы решаем измененную задачу.
источник

JC

Julian =) Coffee in Rust Beginners
ну может у него там какой-то ансейф код, который полагается на то, можно ли сцепить два слайса в один, и мы ему дали ответ)
источник

V

Vitaliy in Rust Beginners
Мне нужен аналог метода fold для итератора, только он должен иметь возможность прервать итерацию в любой момент и вернуть последнее значение, такое есть?

Какая-то такая сигнатура у метода должна быть, по идеи
fn fold_while<B, F>(self, init: B, f: F) -> B where
   F: FnMut(B, Self::Item) -> Option<B>
Поясню дополнительно, что вначале отсеить хвост путём вызова take_while у меня не выйдет, т.к. прерывание мне надо делать не просто по текущему элементу, а на основе результата предыдущих итераций, которые я протаскиваю через переменную init: B, т.е. в init у меня содержит текущий статус итерации со значением:

enum Status {
   Scanning,
   Terminating(usize),
   Finished(usize)
}

Есть идеи как такое решить? Пока у меня ненужный хвост, который надо отбросить "игнорируется" вот так, но хочется всё-таки как-то прервать итерацию:

if let ParseStatus::Finished(_) = state {
          return state;
      }
источник

r

red75prime in Rust Beginners
Vitaliy
Мне нужен аналог метода fold для итератора, только он должен иметь возможность прервать итерацию в любой момент и вернуть последнее значение, такое есть?

Какая-то такая сигнатура у метода должна быть, по идеи
fn fold_while<B, F>(self, init: B, f: F) -> B where
   F: FnMut(B, Self::Item) -> Option<B>
Поясню дополнительно, что вначале отсеить хвост путём вызова take_while у меня не выйдет, т.к. прерывание мне надо делать не просто по текущему элементу, а на основе результата предыдущих итераций, которые я протаскиваю через переменную init: B, т.е. в init у меня содержит текущий статус итерации со значением:

enum Status {
   Scanning,
   Terminating(usize),
   Finished(usize)
}

Есть идеи как такое решить? Пока у меня ненужный хвост, который надо отбросить "игнорируется" вот так, но хочется всё-таки как-то прервать итерацию:

if let ParseStatus::Finished(_) = state {
          return state;
      }
try_fold. Ok(state) для продолжения, Err(state) для раннего возврата
источник

V

Vitaliy in Rust Beginners
red75prime
try_fold. Ok(state) для продолжения, Err(state) для раннего возврата
точно, спасибо
я похоже в глаза долблюсь
источник

NN

Nickolay Novikov in Rust Beginners
а есть простой способ получить что-то вроде backtrace для Error ?
источник

RG

Random Guy in Rust Beginners
Nickolay Novikov
а есть простой способ получить что-то вроде backtrace для Error ?
источник