• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Lua脚本调用外部脚本

    test.lua脚本定义main函数如下:

    function main(szName, num1, num2)   
      print("main()", szName, num1, num2); 
      local nRandMax = 10000;  
      local nRand = math.random(nRandMax); 
      print("nRand =", nRand) 
      return 1; 
    end
    
    

    现在我想在test.lua脚本中调用另外一个test1.lua脚本文件中的GetRandMax(),通常的做法是这样的:

    function main(szName, num1, num2)   
      print("main()", szName, num1, num2); 
      dofile("test1.lua")   --加载并编译运行脚本 
      local nRandMax = GetRandMax();  
      local nRand = math.random(nRandMax); 
      print("nRand =", nRand) 
      return 1; 
    end
    
    

    看上去是这样的,非常简单,通过dofile对test1.lua文件进行加载并编译运行,这部操作会将test1.lua文件中的函数和变量压入全局的虚拟栈中,这样就可以实现对GetRandMax()调用。但是这里有个问题:dofile函数接受的是需要引用的外部脚本的路径,如果多次调用会不胜其烦,而且效率不高。可能有人谁说,那我们直接把dofile作为全局函数执行,就像这样:

    dofile("test1.lua") 
    dofile("test2.lua") 
    dofile("test3.lua") 
     
    function main(szName, num1, num2)   
      print("main()", szName, num1, num2); 
      local nRandMax = GetRandMax();  --调用test1.lua中的函数 
      local nRand = math.random(nRandMax); 
      print("nRand =", nRand) 
      return 1; 
    end
    
    

    这样做是可以的,但是仍然有些问题:

        1,如果test.lua文件dofile(test1.lua),而test1.lua文件dofile(test.lua),怎么办!出现循环应用,执行后堆栈溢出;

    复制代码 代码如下:

    test.lua:5: too many C levels (limit is 200) in function at line 5 near '"main()"'

        2,dofile的路径问题,每次都要传入文件的绝对路径,如果路径不正确,无法正常执行,这也是个很烦的事。

    复制代码 代码如下:

    cannot open \script\test.lua: No such file or directory

    那怎样做才更好呢?既然dofile有这些的问题,我们就把这些问题解决。在C/C++中实现Include脚本接口函数,在脚本中作为全局函数调用,实现外部脚本文件包含功能。

    //脚本接口 TLua_Funcs g_GameFunc[] = { 
      { "Include",        LuaInclude }, 
      { "ReloadAllScript",    LuaReloadAllScript}, 
      { "SayHello",       LuaSayHello }, 
      { "StopGame",       LuaStopGame }, 
    };
    
    

    在Include函数中使用set集合避免重复包含的问题,获取当前的执行路径拼接成绝对路径,这样就省了不少事;)

    Include("\\script\\test1.lua") --Include脚本接口 
     
    function main(szName, num1, num2)   
      print("main()", szName, num1, num2); 
      local nRandMax = GetRandMax();  --调用test1.lua中的函数 
      local nRand = math.random(nRandMax); 
      print("nRand =", nRand) 
      return 1; 
    end
    

    您可能感兴趣的文章:
    • Cocos2d-x中调用Lua及HelloWorld.lua源码分解
    • C++中调用Lua函数实例
    • Lua中调用C++函数实例
    • Lua中的闭合函数、非全局函数与函数的尾调用详解
    • Lua中调用函数使用点号和冒号的区别
    上一篇:Lua教程(二):C++和Lua相互传递数据示例
    下一篇:Lua教程(三):C语言、C++中调用Lua的Table示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Lua脚本调用外部脚本 Lua,脚本,调用,外部,Lua,脚本,