Ich habe eine Funktion downsample_vec
, die eine Vec
nimmt und einige ihrer Werte aufgrund ihrer Positionen entfernt. Ich hatte die richtigen Züge Probleme mit Anmerkungen versehen (ich brauchte nur Clone
und Index
, kann es aber nicht funktioniert), so habe ich beschlossen, self
zu verwenden, um zu sehen, ob ich die Compiler davon überzeugen kann, die richtigen Schlüsse zu machen:Ist es eine schlechte Form, inhärente Typen in einer Bibliothek zu erweitern?
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);
}
}
}
}
Dies ergibt den Kompilierungsfehler the value of the associated type `Output` (from the trait `std::ops::Index`) must be specified [E0191]
.
Ich bin nicht genau sicher, wie man den Ausgabetyp angibt, und fand keine Hinweise, wie dies zu tun ist, nur Blogs auf Eigenschaften im Allgemeinen. Meine Hauptressource war the rust vec .retain()
source.
Ist es schlechte Form zu lokal Monkeypatch Vec
wie folgt in einer bestimmten Bibliothek an erster Stelle, oder gibt es einen richtigen Weg, dies zu tun? (Die ursprüngliche separate Funktion, die ich geschrieben habe, ist in the playground sichtbar).
Vielen Dank für das Problem der Funktionsbeschreibung. Ich hatte zu viele Änderungen an der Frage vorgenommen, als ich damit herumhantierte. –