Lua C API: Was ist der Unterschied zwischen lua_gettop () und -1?

8

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%     
deepspace 26.08.2013, 13:12
quelle

4 Antworten

13

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!

    
Lorenzo Donati 26.08.2013, 19:19
quelle
4

Von PIL ( Ссылка )

  

Beachten Sie, dass ein negativer Index -x dem positiven Index gettop - x + 1 entspricht.

Deshalb

%Vor%

tut dasselbe als

%Vor%     
jcm 26.08.2013 13:30
quelle
2

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.

    
Mike Seymour 26.08.2013 13:30
quelle
0

Wie bereits erwähnt, gibt lua_gettop den Index des obersten Elements im Stapel zurück. Wenn der Stapel leer ist, gibt es kein Element in Index -1. Also gibt dir die Funktion lua_gettop eine Grenze für den zu verwendenden Index.

    
Daniel 26.08.2013 19:39
quelle

Tags und Links