2013-08-26 28 views
8

Yığını tam olarak anlamıyorum.Lua C API: lua_gettop() ve -1 arasındaki fark nedir?

lua_gettop() 

istif içinde üst elemanın dizinini döndürür. göstergeleri 1'den başladığından, bu sonuç yığındaki öğelerin sayısına eşittir (ve 0 boş bir yığın anlamına gelir).

yüzden ve -1 arasındaki fark nedir? hemen böyle bir dizin olarak kullanmak eğer

lua_getglobal(L,"Foo"); 
if(lua_isfunction(L,lua_gettop(L))) { 

lua_getglobal(L,"Foo"); 
if(lua_isfunction(L,-1)) { 
+5

lua_gettop() işlevi bir işlevdir, oysa -1 değeri bir tamsayı değişkendir. –

+5

Sence ben aptalım mı? – deepspace

+5

Hayır, yapmam. Sorunuz olsa Stack Overflow için uygun değil. –

cevap

13

Yığını, alttan (yani, ilk itilmiş) birinci indekse sahip olan alttan büyüyünce düşünebilirsiniz, sonra başka bir öğeye (indeks 2), sonra diğerine (indeks 3), vs. basarsınız. Ayrıca "Normal endeksi" (alttan bir indeksleme) başlayarak yanı sıra, C bir dizinin böyle elemanın mutlak indeksi (olduğunu söyleyebiliriz

+-----------------------+ 
| 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) 
+-----------------------+ 

: Yani bu durum var 1). Bunun yerine negatif dizin yığının üstüne "göreli" dir. lua_gettop, yığın kümesinin mutlak dizinini verir (her zaman göreceli dizin -1 olan).

Yığınları neden dizinlemenin iki yolu var, o zaman? Bazen bir dizi gibi (mutlak indeksi kullanarak) elemanlara erişmek için yararlıdır ve bazen sadece son itilen öğelere erişmeniz gerekir (böylece üst kısımdan indeksleme).

BTW, genellikle Lua ters yığını görselleştirmek: yukarıda ve aşağı doğru giderek artan başlangıç ​​malzemesi (yani yığın üst zihinsel temsil alt kısmında). Bu zihinsel modeli daha faydalı buluyorum çünkü -1.1 değerini "kodu ( ilk basamağını bulana kadar) kodunda (yukarı doğru) geri çevirdim. Bu şekilde, indeks -2 " ikinci basamağını bulana kadar" geri adım adım olacaktır. Tüm bunlar neyi ittiğimi hızlı bir şekilde belirlememde yardımcı olur.

Ancak karışıklığı önlemek için, burada yığın üst üstündeki gerçekten çekilir daha klasik gösterimini, kullanılan!

+0

Bu harika! Güzel cevap. – deepspace

2

fark yoktur. Ancak, endeksi saklamak ve daha sonra kullanmamak için başka bir şey yapabilirsiniz. PIL itibaren

4

(http://www.lua.org/pil/24.2.3.html)

Bildirim olumsuz endeks -x pozitif indeksi denk olduğunu gettop - x + 1.

nedenle

if(lua_isfunction(L,lua_gettop(L))) { 

yapar

if(lua_isfunction(L,-1)) { 
ile aynıdır. 210
+2

lua_gettop' 0 döndürmediğinde değil. – lhf

0

Daha önce de belirttiğiniz gibi, lua_gettop yığındaki üst öğenin dizinini döndürür. Yığın boşsa, indeks -1'de hiçbir öğe yoktur. Böylece lua_gettop işlevi kullanabileceğiniz dizinin sınırını verir.

İlgili konular