Mein ursprüngliches Ziel ist es, eine Liste von Wörtern, eins in jeder Zeile, zu holen und sie in ein HashSet
zu setzen, während Kommentarzeilen verworfen und E / A-Fehler korrekt erhöht werden. Gegeben die Datei "stopwords.txt":
Ich habe es geschafft, den Code so zu kompilieren:
%Vor%Hier ist ein Spielplatz , der auch die obige Datei erstellt.
Ich würde erwarten, am Ende des Programms einen Satz von 4 Saiten zu haben. Zu meiner Überraschung gibt die Funktion tatsächlich eine Menge zurück, die eine einzige Zeichenkette mit allen verketteten Wörtern enthält:
%Vor% Geführt von einem Ratschlag in den Dokumenten für FromIterator
, I Alle Aufrufe von from_iter
wurden entfernt und stattdessen collect
verwendet ( Spielplatz ), das hat das Problem tatsächlich gelöst.
Warum führen die vorherigen Aufrufe von from_iter
zu unerwarteten Schlussfolgerungen, während collect()
genauso funktioniert?
Eine einfachere Wiedergabe:
%Vor% Das Problem besteht darin, dass wir hier den Iterator zweimal sammeln. Der Typ von words
ist Result<_, u8>
. % Co_de% auch implementiert Result
selbst. Wenn wir am Ende also Iterator
aufrufen, erkennt der Compiler, dass der from_iter
-Typ aufgrund der Methode Ok
sein muss Unterschrift. Wenn Sie rückwärts arbeiten, können Sie ein String
aus einem Iterator von String
konstruieren, also wählt der Compiler das aus.
Das Entfernen des zweiten Strings
würde es lösen:
Oder für Ihr Original:
%Vor% Natürlich würde ich normalerweise stattdessen from_iter
empfehlen, da ich die Verkettung bevorzuge:
Tags und Links rust type-inference iterator