Справочное руководство по языку Lua 5.1 :: 3.1 - Псевдо-индексы



3.1 - Стек

В Lua используется виртуальный стек для обмена данными с С-кодом. Каждый элемент этого стека представлен в Lua значением (nil, число, строка и т.п.).

Когда из Lua вызывается C -код, вызываемая функция получает новый стек, независимый от предыдущих стеков и стека С-функций. Изначально стек содержит все аргументы для С-функции, вызывающая программа получает результат вызова также из стека (смотрите lua_CFunction).

Для простоты, большинство вызовов API не придерживаются строгого алгоритма работы со стеком (последний вошел – первый вышел). Напротив, любой элемент стека доступен по индексу: положительное значение индекса обозначает абсолютную позицию в стеке (начинающуюся с 1); отрицательное значение – смещение относительно вершины стека. То есть, если в стеке n элементов, то индекс равный 1 означает первый элемент (тот, который попал в стек первым), а индекс равный n – последний. Индекс -1 также указывает на последний элемент стека, а индекс n- первый. Индекс является допустимым, если удовлетворяет условию: 1 ? abs(index) ? top.