Możesz sobie wyobrazić, że stos rośnie od dołu, z dolnym (tj. Pierwszym pchanym) elementem posiadającym indeks 1, następnie wciskasz inny element (indeks 2), a następnie inny (indeks 3), itd. więc masz taką sytuację:
+-----------------------+
| element with index 6 | <-- top ("relative" index -1)
+-----------------------+
| element with index 5 | <-- -2
+-----------------------+
| element with index 4 | <-- -3
+-----------------------+
| element with index 3 | <-- -4
+-----------------------+
| element with index 2 | <-- -5
+-----------------------+
| element with index 1 | <-- bottom ("relative" index -6)
+-----------------------+
można również powiedzieć, że „normalne index” (jeden indeksowanie od dołu) jest absolutnym indeks elementu (jak w przypadku tablicy w C, oprócz począwszy od 1). Zamiast tego indeks ujemny jest "względny" względem wierzchołka stosu. lua_gettop
podaje bezwzględny indeks górnego stosu (który ma zawsze względny indeks -1
).
Dlaczego istnieją dwa sposoby indeksowania stosu, a następnie? Ponieważ czasami przydatne jest uzyskiwanie dostępu do elementów takich jak tablica (przy użyciu indeksu bezwzględnego), a czasami wystarczy uzyskać dostęp do ostatnio pchanych elementów (czyli indeksować od góry).
Przy okazji, zwykle wizualizuję stos Lua odwrócony: zaczynając od góry i rosnąc w dół (tj. Wierzchołek stosu znajduje się w dolnej części mojej reprezentacji mentalnej). Uważam, że ten model mentalny jest bardziej przydatny, ponieważ interpretuję indeks -1 jako "cofam się w kodzie (w górę, w związku z tym), aż znajdziesz pierwsze naciśnięcie". W ten sposób indeks -2 będzie "cofać kod, dopóki nie znajdziesz drugiego naciśnięcia", itd .. Wszystko to pomaga mi szybko zidentyfikować, gdzie pchnąłem co.
Jednak, aby uniknąć nieporozumień, użyłem tutaj bardziej klasycznej reprezentacji, w której wierzchołek stosu jest naprawdę u góry!
'lua_gettop()' jest funkcją, podczas gdy '-1" jest literałem całkowitym. –
Myślisz, że jestem idiotą? – deepspace
Nie, nie mam. Twoje pytanie nie pasuje jednak do Stack Overflow. –