c/c++ 呼叫 lua 函式有兩種:
1, lua 指令碼裡,沒有local 修飾的函式,即為全域性函式
2, lua 指令碼裡,有local 修飾的函式,即為區域性函式
其實呼叫函式和取lua裡的變數是一樣的,網上講得最多的是呼叫全域性函式,這裡主要講呼叫非全域性函式(或是變數)。
如有指令碼: test.lua
--定義了乙個全域性表
com = {}
--定義了乙個區域性函式
local function add(a, b)
print("a = "..a);
print("b = "..b);
return a + b;
endcom =
有c檔案: main.c
#include
#include
#include "lauxlib.h"
#include "lua.h"
#include "lualib.h"
int main()
lua_pcall(l, 0, 0, 0); /* 前面這幾步都基本固定 */
lua_getglobal(l, "com"); /* 先找到表 */
if(lua_type(l, -1) != lua_ttable)
lua_pushstring(l, "myadd"); /* 要找的函式名入棧 */
lua_gettable(l, -2);
if(lua_type(l, -1) != lua_tfunction) /* 找到的是否是函式 */
lua_pushnumber(l, 111);
lua_pushnumber(l, 222);
lua_pcall(l, 2, 1, 0); /* 傳參, 執行 */
printf("call lua function add() and result: %d\n", (int)lua_tonumber(l, -1));
lua_close(l);
return 0;
}執行結果
[root@localhost lua_call_c]# ./a.out
a = 111
b = 222
call lua function add() and result: 333
系統:centos 6.5
核心: linux 2.6.32-431.el6.i686
gcc : gcc (gcc) 4.4.7 20120313 (red hat 4.4.7-4)
Lua筆記10 非全域性函式
lua中函式可以作為全域性變數也可以作為區域性變數,我們已經看到一些例子 函式作為 table 的域 大部分 lua標準庫使用這種機制來實現的比如 io.read math.sin 這種情況下,必須注意函式和表語法 1.表和函式放在一起 lib lib.foo function x,y return...
LUA教程非全域性函式 22
lua中函式可以作為全域性變數也可以作為區域性變數,我們已經看到一些例子 函式作為table的域 大部分lua標準庫使用這種機制來實現的比如io.read math.sin 這種情況下,必須注意函式和表語法 1.表和函式放在一起 lib lib.foo function x,y return x y...
Lua初識之非全域性函式 十二
lua初識之非全域性函式 注意 在lua中呼叫乙個函式要在呼叫之前定義,否則出錯 表和函式放在一起 lib lib.foo function x,y return x y endlib.goo function x,y return x y endprint lib.foo 3,5 8 print ...