Lua example

来源:互联网 发布:转运公司推荐 知乎 编辑:程序博客网 时间:2024/05/08 16:41
lua_State *L;int c_average(lua_State *L);int c_average(lua_State *L){    int n = lua_gettop(L); /*返回栈顶元素的索引。因为索引是从1开始编号的(1表示栈底,-1表示栈顶),所以这个结果等于堆栈上的元素个数(返回0表示堆栈为空)。这里栈中元素的个数就是传入的参数个数*/    double sum = 0;    int i;    for (i = 1; i <= n; i++)    {        if (!lua_isnumber(L, i))        {           lua_pushstring(L, "Incorrect argument to 'average'"); //将错误信息压入栈中           lua_error(L); //抛出栈顶的错误           /*           int lua_error (lua_State *L);           产生一个 Lua 错误。错误信息(实际上可以是任何类型的 Lua 值)必须被置入栈顶。这个函数会做一次长跳转,它不会再返回。           */        }        sum += lua_tonumber(L, i); //lua_tonumber将栈中指定index的值转换成数值类型的值,注意并不会从栈中弹出这个    }    double avg = sum / n;    lua_pushnumber(L, avg); //将avg压入栈中,第1个返回值是avg    lua_pushnumber(L, sum); //将sum压入栈中,第2个返回值是sum    return 2; /*return the number of results,该函数有2个返回值,即上面入栈的avg和sum*/}void main(){       L = luaL_newstate(); //创建一个新的独立的状态机       /*register our function,告诉lua脚本其中调用的average函数(lua中的变量名)对应的是一个叫c_average的c语言函数*/       lua_register(L, "average", c_average);       /*run the script*/       luaL_dofile(L, "e1.lua"); // 加载脚本,脚本中的可执行语句将会得到执行       /*Loads a file as a Lua chunk and then 以保护模式调用一个函数,等价于(luaL_loadfile(L,filename) || lua_pcall(L, 0, LUA_MULTRET, 0)) */       lua_getglobal(L, "avg"); //将全局变量avg的值入栈,等价于lua_getfield(L,LUA_GLOBALSINDEX, "name")       printf("avg is: %d\n", lua_tointeger(L, -1)); //读栈顶的int值,注意不会从栈中弹出这个元素       lua_pop(L, 1); //弹出栈顶的一个元素       lua_getglobal(L, "sum"); //将全局变量sum的值入栈       printf("sum is: %d\n", lua_tointeger(L, -1));      lua_pop(L, 1); //弹出栈顶的一个元素       lua_close(L); //cleanup Lua       return;}
 
e1.luaavg, sum = average(10, 20, 30, 40, 50);



 

require ("global.lua");local scriptPath = "./app_data/script/"local luaFile; function g_DealBusiness(fc,fileName)    g_fc = fc;      g_cicsTab = GCS_XmlFileParse(fileName);if type(g_cicsTab)=='table'  and g_cicsTab.n thenif g_cicsTab.n ==1  and  g_cicsTab[1].n then   local num = g_cicsTab[1].n;   if num>1 then  getXMLInfo(g_cicsTab[1][1]); --获取数据    dealHeadInfo(g_xmlTab); --处理数据  local i=2;  for i=2,num do  getXMLInfo(g_cicsTab[1][i]); --获取body数据  luaFile =  scriptPath .. "tt/my_" .. g_fc .. ".lua";     print(os.date(),"业务处理",luaFile);  dofile(luaFile);--  loadfile(luaFile);  end     endendendreturn 0;end


 

0 0
原创粉丝点击