lua的一些基本知识

Lua基础知识
Lua中最基本的结构就是表(table),获取表中数据 可以用 pairs 及ipairs
两者的区别在于:
迭代table元素的(pairs),迭代数组元素的(ipairs)
元表
Lua 提供了元表(Metatable),允许我们改变table的行为,每个行为关联了对应的元方法。
Setmetatable()
对象
使用元表实现对象和继承等

Java调用lua
下载 luajava-1.1.dll 和 luajava-1.1.jar 。然后,配置环境,将luajava-1.1.dll这个动态链接库 放到java目录环境下的jre的bin目录下。将 luajava-1.1.jar包放到jre/lib/ext文件下
如果碰到 no luajava-1.1 in java.library.path 这个异常,把 luajava-1.1.dll 这个文件复制去 system32文件夹下一份,重新编译。

Java调用lua例子
Java main方法

LuaState L = LuaStateFactory.newLuaState();
        L.openLibs();

        L.LdoFile("3.lua");
        //找到函数testa
        L.getField(LuaState.LUA_GLOBALSINDEX, "create");
        //参数2压栈
        L.pushNumber(5);;
        //调用!! 一共两个参数, 1个返回值
        L.call(1, 0);
        //保存返回值, 到a中
        L.setField(LuaState.LUA_GLOBALSINDEX, "a");
        //读入a   
        LuaObject l = L.getLuaObject("a");
        //打印结果.
        L.close();
3.lua
Area = {area = 0}
function  Area:new(length)
        print("开始初始化")
        o={} or 0
        setmetatable(o,self)
        self.__index = self
        length =length or 0
        self.area = length*length
        return o
end

function Area:out()
        print("你输入的正方体的面积为:",self.area)
end

function create(length)
        area = Area:new(length)
        area:out();
end

lua 调用java(luajava)

实现了Lua中调用Java的逻辑,但是作为一种脚本语言,Lua没办法脱离高级语言而独立运行起来,所以要测试Lua是否能正常实现对Java的调用,还是需要在Java中运行此Lua脚本。
作为一门扩展式语言,Lua没有”main”程序的概念:它只能嵌入一个宿主程序中工作,该宿主程序被称为被嵌入程序或者简称宿主。宿主程序可以调用函数执行一小段Lua代码,可以读写Lua变量,可以注册C函数让Lua代码调用。

目录结构如下:

这里写图片描述

这里写图片描述

luajTest.lua如下所示:
这里写图片描述

lua调用的java类JDBCUtilsConfig如下所示:
这里写图片描述
luajava库反射调用的性能在某些情况下,竟然比java原生绑定要快。
1 在对象方法数比较少的情况下,luajava生成的类的方法执行速度比java绑定要快一点,但基本一样。
2 在对象方法数多多情况下(复杂对象),luajava生成的类的执行速度比java绑定慢(可能是绑定了不相关的方法),我的一个测试对象执行结果,luajava比java的速度大概是 1.5 : 1
3 创建对象的速度上,java绑定远优于luajava,这个基接近2:1的关系了;
选择建议:
如果是偶然使用的一个对象,建议使用luajava,方便快捷,速度也不差
如果是经常new的对象或复杂的对象(但是实际只使用部分方法)建议用java绑定

lua 调用java(luaj)
这里写图片描述
这里写图片描述
这里写图片描述

Luaj 和luajava
首先LuaJ框架是使用纯Java语言来实现的,它用Java实现了一套自己的Lua虚拟机,所以就不需要JNI来做中介了,所以对于多年不接触C/C++代码的人来看会更加舒服一些。并且该框架还在更新维护,接口用起来更加方便,但是缺点在于纯Java实现,相对C语言实现速度慢。
LuaJava框架就比上一个轻量一些,是基于Lua原生的虚拟机进行开发的,它只对标准的Lua编程API做了简单的JNI封装,Java层的代码也较少。这个框架虽然已经停止维护,但还是能支持最新的Lua5.3版本。
Luajava缺点:无法中断停止脚本、多线程问题和JavaGC超时异常等等问题
Luaj缺陷:运行速度较慢。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值