Warum verhält sich Ruby Enumerator
standardmäßig nicht wie Enumerator::Lazy
?
Gibt es einen Fall, in dem jemand eine nicht-faule Enumerator
verwenden möchte?
Bearbeitet:
Ein Kommentar zu den Rückwärtskompatibilitätsantworten unten erklärt, warum ich noch nicht überzeugt bin:
Nehmen wir an, wir hätten diese "brechenden" Änderungen zu Ruby 2.0.0 hinzugefügt, das eine Hauptversion ist, Sie würden Ihren Code (vor allem wenn Sie in die Produktion gehen) gründlich testen, bevor Sie den Wechsel machen, nein?
Bearbeiten Sie # 2
Ich vermutete, dass es etwas mit Effizienz zu tun hat (lassen Sie es mich wissen, wenn etwas nicht stimmt), also habe ich den folgenden Benchmark gemacht: (Natürlich gibt es Orte, an denen faul ist besser. Das ist möglicherweise zu zeigen, warum Ruby nicht ist Faulenzen die ganze Zeit?)
%Vor% Ich bekomme Folgendes: (vielleicht aufgrund des Aufrufs von .lazy
Methode anstelle von Enumerator::Lazy
von Anfang an?)
Wenn Sie Faulheit als Standard festlegen möchten, wäre breaking change für jeden Code, der erwartet / verwendet wird auf Nebenwirkungen.
Jede frühere Verwendung von Enumerator müsste untersucht und getestet werden. Der "sicherste" / "vernünftigste" Ansatz besteht einfach darin, das nicht-faule Verhalten als Standard beizubehalten - und gleichzeitig eine Lazy-Alternative bereitzustellen.
Einige grundlegende / vorherige Entwurfsentscheidungen werden nicht so leicht verworfen; Enumeratoren werden so weit wie Ruby 1.8.7 unterstützt.