C C 呼叫 Lua 函式(非全域性函式)

2021-08-07 22:44:03 字數 1278 閱讀 6285

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 ...