Dennis89 hat geschrieben: Dienstag 30. September 2025, 17:28
nur durch den festgelegten Typ `Operations` kann ich nicht einfach eine 3. Funktion verwenden. Da muss ich noch schauen, ob und wie ich das mache.
Zwei Möglichkeiten: Du übergibst nicht ein Array mit konstanter Länge, sondern einen Wert mit einem Typ, dessen Länge dynamisch festgelegt werden kann. Oder du schreibst die Funktion so, dass sie mit Arrays beliebiger Länge aufgerufen werden kann. Stichwort
const generics.
Wieso `use itertools::Itertools as _;` ? Also wieso das Umbenennen?
Man kann Methoden aus Traits nur aufrufen, wenn der Trait importiert ist. Ich will den Trait selbst aber nicht benutzen, sondern nur Methoden daraus. Also benenne ich den Trait beim Import um, damit ich weniger Namen im globalen Scope habe. Manchmal hat man den Fall, dass man Methoden aus zwei verschiedenen Traits mit dem gleichen Namen benutzen will. `std::fmt::Write` und `std::io::Write` zum Beispiel, da
muss man mindestens einen umbenennen. Irgendwann hab ich mir mal angewöhnt, das
immer zu machen, wenn ich einen Trait nur wegen seiner Methoden importiere.
Mich verwirrt das, weil die Unterstriche auch in `.collect::<Result<Vec<_>, _>>()?;` verwendet werden. Sind das jetzt Itertools-Typen? Ne, oder?
Nein, der Unterstrich wird in Rust quasi gleich benutzt wie in Python: „Da muss an der Stelle syntaktisch ein Name stehen, aber ich will den nicht hinschreiben.“, z. B. in einer `for`-Schleife:
In einer Typannotation bedeutet er, dass der Typ inferiert werden soll. Ich könnte `.collect::<Result<Vec<u64>, Box<dyn std::error::Error>>>()` schreiben, aber sowohl das `u64` als auch das `Box<dyn std::error::Error>` ist eindeutig durch den Rest der Funktion bestimmt, also muss ich das nicht schreiben. Und man kann nicht `.collect::<Result<Vec>>()` schreiben, weil es nicht erlaubt ist, Typparameter einfach wegzulassen.
Code: Alles auswählen
let result_: u64 = operation(&result, value);
result = result_;
Warum schreibst du das so? Warum nicht direkt `result = operation(&result, value);`?
Ansonsten sind da noch ein paar Typannotationen, die man eigentlich nicht schreiben würde. Gibt es einen Grund, warum du die an ein paar Stellen schreibst, an anderen Stellen aber nicht?