关于 lua 语法的 loadstring 问题 纠结中

在124.lua脚本文书中写了二个基于字串重返表对象的aa1函数,编写翻译没难点,可是在C++调用该lua文件时会失利124.lua那样写的如:–重返表函数functionaa1(卡塔尔localfunc=loadstring(“return{3,6}”卡塔尔国iffunc==nilthenreturnnilendreturnfunc(卡塔尔endC++中调用运转该文件是那样:luaL_dofile(L,”124.lua”卡塔尔;//会战败不可何原因,会的帮看下先谢了

脚下本来就有 luaj 项目可在JVM中推行Lua脚本,由于其编写翻译功效和执行效能不比luac ,所以开辟了那些接口和luaj相像的、使用luac作为Lua设想机的Java库。

对于使用过luaj的情侣,初学luac一定会非凡懵逼,因为luaj虚拟机做了很好的包裹,所以接受或驾驭起来特别轻便;而luac只给程序猿提供了二个lua处境(lua_State)、操作lua货仓的一群函数和把lua数据类型转为C数据类型的函数。那篇小说注重陈说本项目
LuaJava 的兑现原理和利用方式。

Globals globals = Globals.createLState; //创建Lua虚拟机boolean result = globals.loadString("name", str);//加载lua源码boolean result = globals.loadData("name", data); //加载lua源码或二进制码if  result = globals.callLoadedData();//执行刚加载成功的lua脚本

率先行,和luaj很像,制造Lua虚构机,并收获全局表。在C层,通过lua函数创制设想机景况(lua_State);初始化lua自带库;开始化自定义的lua错误函数;在全局表中早先化二个寄存Java
Global引用的表(用来在虚拟机销毁的时候释放Global援用,前边会提到);在lua
package.searchers
表中扩充通过Java代码搜索对应lua文件函数(lua脚本require时会调用)。

第二行和第三行,成效相像,加载lua脚本源码或加载二进制码,若加载退步,可通过globals.getLoadState()获得错误码,通过globals.getErrorMsg()获取错误消息。在C层,通过lua函数加载脚本。

第四行,实行在那设想机中刚加载的台本,若未加载脚本,或加载失败,则会抛出极其,若进行倒闭,可因此globals.getExecuteState()得到错误码,通过globals.getErrorMsg()获取错误音讯。在C层,通过lua函数调用在栈顶的lua函数,并回到。

Java代码:

globals.registerStaticBridgeSimple("LuaBridgeClass", BridgeA.class, "bridge1", "bridge2"...); //注册Java静态方法

lua代码:

LuaBridgeClass:bridge1--调用java中的BridgeA.bridge1LuaBridgeClass:bridge2--调用java中的BridgeA.bridge2

发表评论

电子邮件地址不会被公开。 必填项已用*标注