имела владение над элементами? Есть у меня сейчас такой код:
if let [ethabi::Token::Address(address)] = &tokens[..] {
return address.clone();
}
хочу избавиться от clone таким образом.
Чтобы сразу мувнуть элемент из вектора, пока ничего лучшего не придумал, чем сделать
if let Some(ethabi::Token::Address(address)) = tokens.pop() {
return address;
}
Но мне такой способ совсем не нравится, т.к. вменяемо выглядит только с 1 элементом (и тут я еще даже не удосужился длину вектора проверить). Если нужно деструктурировать 2 или больше, то фиг пойми как
По хорошему тебе нужна функция <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]) = ... {}
Обсуждают сегодня