lua require机制
local m= require "mod"//返回由模块函数组成的table
// 1 lua文件loadfile加载 2 c文件loadlib加载( 定义一个 luaopen_<模块名>的函数,loadlib加载成功会调用
luaopen_<模块名> 小技巧:
模块名为a-b,则会调用 luaopen_b函数
搜索文件路径
1 LUA_PATH /LUA_CPATH
2
mod.foo()
m.foo()
一 require lua file
complex.lua
local modname = ...
local M={}
_G[modname]=M
package.loaded[modname]=M
function M.add(c1,c2)
return c1+c2
end
complex_test.lua
local c = require "complex"
print( c.add(1,2) )
print( complex.add(2,3))
:!lua-5.2.3 complex_test.lua
3
5
lua5.1后支持的一种写法
complex.lua
module(...,package.seeall)
function add(c1,c2)
return c1+c2
end
二 require c file
require_c.c
#include <stdio.h>
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
static int add(lua_State *L)
{
int a,b,c;
a=luaL_checknumber(L,1);
b=luaL_checknumber(L,2);
c=a+b;
lua_pushnumber(L,c);
return 1;
}
static const struct luaL_Reg lib[]={
{"cadd",add},
{NULL,NULL},
};
int luaopen_require_c(lua_State *L)
{
//luaL_openlib( L,"requirec",lib,0);
luaL_newlib( L, lib);
return 1;
}
gcc require_c.c -fPIC -shared -o require_c.so -I ~/lua_so/include/
require_test.lua
local c = require "require_c"
print(c.cadd(1,4))