BEARBEITEN: (Gelöst) Tatsächlich wurde es wahrscheinlich wegen einer Endlosschleife ausgelöst
Ich habe programmiert und nachdem ich eine Methode hinzugefügt habe, habe ich folgendes bekommen:
%Vor%Ich bin mir ziemlich sicher, dass es keine unendliche rekursive Schleife gibt.
Der Code ist im Moment irgendwie gemifiziert, aber ich habe auch den Fehler bekommen, die Ruby-Datei direkt auszuführen.
Danke für jede Hilfe, wie man (zu einigen Informationen, zu einigen Tests) das Problem beheben kann, wenn möglich, ohne das Ganze neu schreiben zu müssen ...
Ich schreibe eine Anwendung, die Ruby Mixins stark verwendet.
Außerdem habe ich eine Reihe von Klassen erstellt, die Mixins generieren (Instanz- / Klassenmethodenmodule, die von anderen Klassen eingefügt werden).
Alles in allem habe ich also ziemlich viele generierte benannte Module mit einigen benutzerdefinierten generierten Codes und Klassen mit vielen Vorfahren.
Aber das sollte mir schließlich eine Menge Schmerzen in der as $ ersparen, wenn ich das Programm schreibe, das oben auf dieser Lib sitzt (das ist der Plan sowieso).
BEARBEITEN: Bis etwas Code für das Zeigen / Testen verfügbar ist, lassen Sie uns meine Frage zu diesem Thema abstrahieren: Gibt es andere Fälle, die die Stapelebene zu tief außer der klassischen Programmausführung-Struktur anheben? - zu tiefes Szenario (das Überstreichen der Finger ist klar und bedeutet etwas ...)?
Gibt es andere Fälle, die neben dem klassischen Programm-Ausführungsbaum-ist-zu-tief-Szenario eine zu hohe Stack-Level-Ausnahme auslösen?
Ja. Da der Stapel nicht in der Tiefe gemessen wird, sondern in Bytes, wird alles, was auf dem Stapel gespeichert ist, früher gefüllt:
%Vor%In diesem Beispiel kann eine Funktion mit nur einer Variablen mehrere tausend Aufrufe tief gehen, bevor sie fehlschlägt, und das Hinzufügen von drei weiteren Variablen tut sehr wenig; Wenn Sie jedoch 26 weitere Variablen hinzufügen, wird die Stapelgröße auf einen Wert erhöht, bei dem nur etwa 3000 Ebenen verfügbar sind.
Das hängt natürlich etwas von der Ruby-Implementierung und dem System ab, auf dem es läuft. Aber ich glaube, das wird immer als allgemeine Regel gelten.
Allerdings denke ich immer noch, dass Rekursion wahrscheinlich Ihr Problem ist, da die Anzahl der Variablen, die erforderlich ist, um dies bei kleinen Anrufkettenlängen passieren zu lassen, immens ist.
Tags und Links ruby stack stack-level