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

Есть ли какой-то способ сделать destructure вектора, чтобы match ветка

имела владение над элементами? Есть у меня сейчас такой код:

if let [ethabi::Token::Address(address)] = &tokens[..] {
return address.clone();
}

хочу избавиться от clone таким образом.
Чтобы сразу мувнуть элемент из вектора, пока ничего лучшего не придумал, чем сделать

if let Some(ethabi::Token::Address(address)) = tokens.pop() {
return address;
}

Но мне такой способ совсем не нравится, т.к. вменяемо выглядит только с 1 элементом (и тут я еще даже не удосужился длину вектора проверить). Если нужно деструктурировать 2 или больше, то фиг пойми как

1 ответов

15 просмотров

По хорошему тебе нужна функция <T, const N: usize> Vec<T> -> Option<[T; N]>. Без const-generics можно либо закостылить ровно для нужного размера: fn pop_3<T>(vec: Vec<T>) -> Option<[T; 3]> { Some([vec.pop()?, vec.pop()?, vec.pop()?]) } Либо могу ещё предложить использовать arraylib, тогда можно как-то так: vec.into_iter().try_collect_array::<[_; N]>() Ну а дальше обычный матч/iflet: if let Some([a, b, c]) = ... {}

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта