Kann mir bitte jemand helfen, die Entwurfsentscheidung, JavaScript-Strings in ES2015 iterierbar zu machen, besser zu verstehen? Die meisten Iterables repräsentieren Sammlungen anderer Dinge: Array
, Set
, Map
, Generator
(irgendwie sorta). Ein String kann nur eine Sammlung von Strings sein (na ja, Unicode-Codepoints). Wenn Sie möchten, dass eine Funktion entweder eine Zeichenkettensammlung akzeptiert (z. B. Set
von Strings oder einen Generator, der Strings liefert) oder eine einzelne Zeichenfolge, gibt es keine Möglichkeit, die Absicht des Benutzers zu unterscheiden. Meinte sie eine einzelne Zeichenfolge oder eine Anzahl von Codepunkten? Das Iterieren von Zeichen scheint ein Eckfall zu sein, im Vergleich zu Stringsammlungen. Meine Neigung wäre in diesem Fall zu speziellen String-Parametern, wenn der (beabsichtigte) Typ string
÷ Iterable<string>
ist.Warum sind Strings in ES2015 iterierbar?
function deleteDocuments(ids /* string or Iterable<string> */) {
if('string' === typeof ids) {
deleteSingleDocById(ids);
} else {
for(let id of ids) {
deleteSingleDocById(id);
}
}
}
Was fehlt mir?
Wenn Ihre Funktion einen einzelnen Parameter erwartet, ist dies entweder eine iterierbare Zeichenfolge oder ein iterierbares Array. Warum lässt man es nicht einfach iterierbar machen? Dein Dilemma ist unklar. – Pointy
FWIW Dies ist auch die Art und Weise, wie die String-Iteration in Python funktioniert hat. –
Was ist das erwartete Ergebnis? – guest271314