Warum wird zipWithIndex in Iterable und nicht in Traversable implementiert?

8

Ich lese "Programmierung in Scala 2ed". In Abschnitt 24.4 wird darauf hingewiesen, dass Iterable viele Methoden enthält, die ohne einen Iterator nicht effizient geschrieben werden können. Tabelle 24.2 enthält diese Methoden. Ich verstehe jedoch nicht, warum einige von ihnen nicht effizient im Iterator implementiert werden können. Betrachten Sie beispielsweise zipWithIndex.

%Vor%

Warum verschieben Sie diese Definition nicht in traversable? Es scheint mir, dass der Code genau derselbe sein könnte und es keinen Unterschied in der Effizienz geben würde.

    
schmmd 06.11.2011, 05:34
quelle

2 Antworten

11

Sie sind vollkommen korrekt und Ihre Implementierung sollte funktionieren. Kein Grund, zipWithIndex in Iterable und nicht Traversable zu definieren; Weder gibt es eine Garantie für die Reihenfolge der Elemente unter Traversierung.

(Dies ist meine erste Antwort auf StackOverflow. Ich hoffe, ich war hilfreich. :) Wenn nicht, bitte sag es mir.)

    
Harrison 06.11.2011, 09:13
quelle
10

Traversable garantiert nicht die Reihenfolge, in der die Elemente besucht werden Sie müssen nur eine foreach-Methode mit der folgenden Signatur definieren:

%Vor%

Da diese Methode nur f für jedes Element in beliebiger Reihenfolge aufrufen muss, ist es nicht sinnvoll, einen Index für Elemente zu haben, da die Reihenfolge für jeden Aufruf von foreach anders sein könnte.

Bearbeiten: Dies ist wirklich nur eine Erklärung, warum es nicht auf Traversable ist. Wie Luigi in den Kommentaren darauf hingewiesen hat, wäre zipWithIndex bei Seq sinnvoller.

    
kassens 06.11.2011 06:49
quelle

Tags und Links