作為一種嵌入式語言,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...