Lua脚本调用外部脚本_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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索lua
, 调用
外部脚本
android 调用lua脚本、java调用lua脚本、易语言调用lua脚本、lua调用shell脚本、nginx调用lua脚本,以便于您获取更多的相关知识。

时间: 2024-08-30 13:15:45

Lua脚本调用外部脚本_Lua的相关文章

Lua 脚本怎么样调用外部脚本

在游戏脚本开发中,我们往往会发现脚本量非常大,而且我们经常会在一些核心脚本文件中定义常用的功能函数,但是Lua脚本没有提供include关键词,那又是怎样调用外部函数的呢?如何实现脚本的Include功能? test.lua脚本定义main函数如下: function main(szName, num1, num2) print("main()", szName, num1, num2); local nRandMax = 10000; local nRand = math.rando

关于脚本调用外部对像和类型库_vbs

先举个例子,最近的flash网马调用: var Flashver = (new ActiveXObject("ShockwaveFlash.ShockwaveFlash.9")).GetVariable("$version").split(","); 这个ShockwaveFlash.ShockwaveFlash.9从何而来,用exescope打开flash9f.ocx选择typelib,即可看到ShockwaveFlash.ShockwaveF

ASP远程脚本调用

远程脚本调用技术(Remote Scripting)的最大特点是:客户端脚本调用服务器脚本时无需刷新整个页面.一般情况下,Web页面需要与服务器交互时必须提交表单数据,刷新整个页面.这不仅不利于改善浏览效果,也不利于提高服务器效率.利用远程脚本调用技术(Remote Scripting),客户端脚本可以像调用本地函数一样调用远程脚本函数,从而极大地方便了交互式Web应用的开发.使得那些基于浏览器的应用更接近于传统的Win32应用.在复杂的表单验证和频繁的数据库操作中,应用远程脚本调用技术的优点是

Lua脚本语言入门笔记_Lua

什么是Lua Lua 是一个小巧的脚本语言.是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy.Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发. 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能.Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行.Lua并没

急送5分,用户控件中如何调用外部js脚本?

问题描述 <scripttype="text/javascript"src=""></script>像这样在用户控件中引用外部脚本,好像是无效!该怎么写? 解决方案 解决方案二:<scriptlanguage="javascript"type="text/javascript"src="名称.js"></script>我记得是这样子的,好久没搞web了解决方案

Lua中调用C++函数实例_Lua

到这为止,大家对Lua和C++之间的通信应该有些熟悉了,今天我们来介绍最后一个操作. (旁白:什么?最后一个?要结束了么?太好了~!) 上一章传送门:http://www.jb51.net/article/55097.htm 1. Lua调用C++的函数 Lua要调用C++的函数还是蛮方便的,首先,我们来创建一个c++函数先: 复制代码 代码如下: public: static int getNumber(int num); int HelloLua::getNumber( int num )

unix-Solaris 10 写一个脚本,在atc用户下,调用该脚本,执行poweroff命令

问题描述 Solaris 10 写一个脚本,在atc用户下,调用该脚本,执行poweroff命令 Solaris 10 写一个脚本,在atc用户下,调用该脚本,执行poweroff命令 解决方案 实现一个脚本,然后atc用户执行 解决方案二: 实现一个脚本,然后atc用户执行

如何使用Ruby脚本调用Oracle存储过程

使用Ruby脚本调用Oracle存储过程的示例: 1.首先创建Oracle存储过程test: SQL> create OR REPLACE PROCEDURE test(p1 in varchar2,p2 out varchar2 ) is 2 BEGIN 3 select p1 ' PROCEDURE executeD!' into p2 from dual ; 4 end; 5 / Procedure created 2.再写Ruby脚本,调用存储过程test,脚本内容如下,将脚本保存为:

引用外部脚本时script标签关闭的写法

在引用外部脚本时,script标签的关闭写法,很多朋友对它保持健忘态度,下面为大家介绍下其正确的写法 在引用外部脚本时,script标签的正确关闭写法如下:   代码如下: <script type="text/javascript" src="js/a.js"></script>    自关闭写法有问题(测试的IE11, chrome 31.0, ff 25.0都不支持):   代码如下: <script type="tex