用C C 編寫lua模組的一般模式

2022-08-02 19:36:13 字數 1832 閱讀 2901

作為一種嵌入式語言,lua提供了一套完備的 c api來幫助 lua 與 宿主程式進行互動。因此使用 c 或者 c++ 來為lua編寫模組是很容易的。

在 lstrlib.c 最後有這樣的**

/**

將函式名與實際呼叫函式記錄在乙個 struct 中,並組成乙個陣列

--- 有點 lua **的趕腳 ---

**/static const lual_reg strlib = ,

, ,

, ,

, ,

, ,

, ,

, ,

, ,

, ,

};/** 這裡是對建立的lib 元表進行後續加工,具體可以看源**

**/static void createmetatable (lua_state *l)

/*** open string library

** 這裡是string 庫的主入口

*/luamod_api int luaopen_string (lua_state *l)

類似的**也出現再了 loadlib.c(package模組)、loslib.c(os 模組)

因此可以總結出 lua 模組的編寫方式

將資料傳入lua介面

/**

向棧中壓入 null

**/lua_api void (lua_pushnil) (lua_state *l);

/** 向棧中壓入 double

**/lua_api void (lua_pushnumber) (lua_state *l, lua_number n);

/** 向棧

**/lua_api void (lua_pushinteger) (lua_state *l, lua_integer n);

/** 將字串s的指定長度len壓入棧中

**/lua_api void (lua_pushlstring) (lua_state *l, const char *s, size_t l);

/** 向棧中壓入乙個字串

**/lua_api void (lua_pushstring) (lua_state *l, const char *s);

/** 向棧中壓入字串並格式化

**/lua_api const char *(lua_pushvfstring) (lua_state *l, const char *fmt,

va_list argp);

/** 向棧中壓入字串並格式化

使用可變引數進行格式化

**/lua_api const char *(lua_pushfstring) (lua_state *l, const char *fmt, ...);

/** 向棧中壓入乙個c函式

**/lua_api void (lua_pushcclosure) (lua_state *l, lua_cfunction fn, int n);

/** 將 b 作為布林值壓入棧中

**/lua_api void (lua_pushboolean) (lua_state *l, int b);

/** 將乙個輕量使用者資料壓入棧中

**/lua_api void (lua_pushlightuserdata) (lua_state *l, void *p);

/** "l"表示的執行緒入棧。如果這個執行緒是當前狀態機的主線程的話,返回1。

**/lua_api int (lua_pushthread) (lua_state *l);

vim 的一般模式

vim 是一款 linux 平台下強大的編輯工具,與 vi 最大的區別就是 vi 不會顯示顏色,而 vim會 顯示顏色。顯示顏色更易於使用者進行編輯。其他功能沒有什麼區別。vim的三種模式 一般模式 編輯模式 命令模式。一般模式 游標移動 h 或者向左方向鍵 游標向左移動乙個字元 l 或者向右方向鍵...

linux的一般模式

vi和vim vi是unix作業系統和類unix作業系統中最通用的文字編輯器。vim編輯器是從vi發展出來的乙個效能更強大的文字編輯器。可以主動的以字型顏色辨別語法的正確性,方便程式設計。vim與vi編輯器完全相容。什麼是一般模式?以vi開啟乙個檔案就直接進入一般模式了 這是預設的模式 在這個模式中...

django介面編寫的一般步驟(六)

1.編寫檢視函式或者檢視類,如下所示 1.獲取請求引數 resquest data request.body try 2.反序列化輸入 將json字串轉化為python字典 resquest data json.loads resquest data except result data retur...