第一版是為 Lua 5.0 編寫的。儘管在很大程度上仍然適用於後續版本,但還是有一些差異。
第四版針對 Lua 5.3,可在 Amazon 和其他書店購買。
購買這本書,您也協助支援 Lua 專案


24.2.1 – 推入元素

API 有一個推入函式,適用於可在 C 中表示的每種類型的 Lua:lua_pushnil 適用於常數 nillua_pushnumber 適用於數字(double)、lua_pushboolean 適用於布林值(在 C 中為整數)、lua_pushlstring 適用於任意字串(char *),以及 lua_pushstring 適用於以零終止的字串

    void lua_pushnil (lua_State *L);
    void lua_pushboolean (lua_State *L, int bool);
    void lua_pushnumber (lua_State *L, double n);
    void lua_pushlstring (lua_State *L, const char *s,
                                        size_t length);
    void lua_pushstring (lua_State *L, const char *s);
另外還有函式可將 C 函式和使用者資料值推入堆疊;我們稍後會討論這些函式。

Lua 中的字串並非以零終止;因此,它們可以包含任意二進位資料,並依賴明確的長度。將字串推入堆疊的官方函式為 lua_pushlstring,它需要一個明確的長度作為引數。對於以零終止的字串,您也可以使用 lua_pushstring,它使用 strlen 提供字串長度。Lua 永遠不會保留指向外部字串(或任何其他物件)的指標(C 函式除外,它們總是靜態的)。對於必須保留的任何字串,Lua 皆會製作一個內部副本或重複使用一個副本。因此,您可以在這些函式傳回後立即釋放或修改您的緩衝區。

每當您將元素推入堆疊時,您有責任確保堆疊有足夠的空間容納它。請記住,您現在是一位 C 程式設計師;Lua 程式不會寵壞您。當 Lua 啟動,以及任何時候 Lua 呼叫 C 時,堆疊至少有 20 個可用插槽(此常數在 lua.h 中定義為 LUA_MINSTACK)。這對於大多數常見用途來說已經綽綽有餘,所以我們通常甚至不會想到這一點。然而,有些任務可能需要更多的堆疊空間(例如,呼叫具有可變數量引數的函式)。在這種情況下,您可能想要呼叫

    int lua_checkstack (lua_State *L, int sz);
它會檢查堆疊是否具有足夠空間以符合您的需求。(稍後會詳細說明。)