Ich verstehe Stack nicht wirklich genau.
%Vor%Gibt den Index des obersten Elements im Stapel zurück. Weil Indizes Beginnen Sie bei 1, dieses Ergebnis ist gleich der Anzahl der Elemente in der stack (und so bedeutet 0 einen leeren Stapel).
Also, was ist der Unterschied zwischen ihm und -1?
%Vor%Sie können sich vorstellen, dass der Stapel von unten wächst, wobei das untere (dh das erste gedrückte) Element den Index 1 hat, dann drücken Sie ein anderes Element (Index 2), dann ein anderes (Index 3) usw. Sie haben also diese Situation:
%Vor% Man könnte auch sagen, dass der "normale Index" (der Index von unten) der absolute Index des Elements ist (wie der eines Arrays in C, abgesehen von 1). Stattdessen ist der negative Index "relativ" zum oberen Teil des Stapels.% Co_de% gibt Ihnen den absoluten Index des obersten Stapels (der immer den relativen Index lua_gettop
hat).
Warum gibt es dann zwei Möglichkeiten, den Stack zu indizieren? Weil es manchmal nützlich ist, auf die Elemente wie ein Array zuzugreifen (mit einem absoluten Index) und manchmal müssen Sie nur auf die zuletzt gedrückten Elemente zugreifen (also von oben beginnend indexieren).
BTW: Normalerweise visualisiere ich den Lua-Stack umgekehrt: von oben beginnend und nach unten wachsend (d. h. der Stapel ist unten in meiner mentalen Repräsentation). Ich finde dieses mentale Modell nützlicher, weil ich den Index -1 als " Schritt rückwärts im Code (aufwärts also) interpretiere, bis du den ersten Push findest ". Auf diese Weise wäre Index -2 " Schritt zurück im Code, bis Sie den zweiten Push finden ", etc .. All dies hilft mir schnell zu identifizieren, wo ich was geschoben.
Um Verwechslungen zu vermeiden, habe ich hier eine eher klassische Darstellung verwendet, bei der der Stapel oben ganz oben steht!
Es gibt keinen Unterschied, wenn Sie es sofort als solchen Index verwenden. Aber Sie können andere Dinge damit tun, wie den Index speichern und später verwenden, wenn es nicht mehr der letzte Index ist.