У меня есть функция downsample_vec
, которая принимает Vec
и удаляет некоторые из ее значений в зависимости от их позиций. У меня была проблема аннотирования правильных черт (я только нужно Clone
и Index
, но не мог заставить его работать), поэтому я решил использовать self
, чтобы увидеть, если я мог бы убедить компилятор, чтобы сделать правильные выводы:Это плохая форма для расширения встроенных типов в библиотеке?
impl Vec<IndexMut<usize>> {
fn downsample<usize>(&mut self, factor: usize) {
let len = self.len();
if factor > len {
self.clear(); // downsample factor skips all elements
} else if factor == 1 {
return; // no actual downsampling
}
for ind in 0..len() {
if ind % factor != 0 {
self.remove(ind);
}
}
}
}
Это дает ошибку компиляции the value of the associated type `Output` (from the trait `std::ops::Index`) must be specified [E0191]
.
Я не совсем уверен, как указать тип вывода, и не нашел ссылок на то, как это сделать, просто блоги на чертах в целом. Мой главный ресурс: the rust vec .retain()
source.
Это плохая форма для локального monkeypatch Vec
как это в определенной библиотеке в первую очередь, или есть правильный способ сделать это? (Исходная отдельная функция, которую я написал, можно просмотреть в the playground).
Спасибо за указание проблемы с описанием функции. Я сделал слишком много изменений и ухищрений на вопрос, как я с ним справился. –