最近lua这种语言比较火!该语言的设计目的是其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
我想说的是如何在Java下使用Lua以提高编程效率、增强你的程序可扩展性。
首先,要在Java上使用Lua脚本,必须有关于Lua脚本解释器以及Java程序可以访问这些脚本的相关API,即相关类库。我使用的是一个叫做LuaJava的开源项目,可以在: http://download.youkuaiyun.com/detail/jwcjlu/9748334 找到LuaJava的类库等
下载下来解压后包括两个文件(我下载的是1.1版本的): luajava-1.1.jar 文件和 luajava-1.1.dll动态连接库文件
其中把luajava-1.1.jar加入你的项目的ClassPath中,以便程序可以使用它提供的API
把luajava-1.1.dll加入到你的系统安装盘的System32文件中如下图
这样环境就准备好了
然后打开eclipse
新建一个lua工程并新建一个LuaJavaTest的java类
LuaJavaTest.java的内容如下
package com.lua;
import org.keplerproject.luajava.LuaException;
import org.keplerproject.luajava.LuaObject;
import org.keplerproject.luajava.LuaState;
import org.keplerproject.luajava.LuaStateFactory;
public class LuaJavaTest {
static String maxAverage="function maxAverage(...) "
+"agr={...} "
+"max=0 "
+"sum=0 "
+"for k,v in ipairs(agr) do "
+"print(k,v) "
+"sum=sum+v "
+"if v> max then "
+"max=v "
+"end "
+"end "
+"return max,sum/#agr "
+"end; ";
public static void main(String[] args) throws LuaException {
LuaState L = LuaStateFactory.newLuaState();
L.openLibs();
System.out.println("这里是Java程序调用Lua脚本");
// 加载脚本
L.LdoString(maxAverage);//获取Lua全局函数,java_lua_f
LuaObject func = L.getLuaObject("maxAverage");
//因为LuaObject类映射了Lua语言中所有类型,即LuaObject也是Lua函数
//通过java中调用LuaObject.call()函数,可以使用lua函数。
//该函数可以传递多个参数 或者返回多个参数
Object[] teste = func.call(new Object[] { 2,4,98,12,34,56},2);
System.out.println(teste[0]);
System.out.println(teste[1]);
System.out.println("这里是Java程序调用Lua脚本end");
}
}
运行一下程序如下
这里是Java程序调用Lua脚本
98.0
34.333333333333336
这里是Java程序调用Lua脚本end
1 2
2 4
3 98
4 12
5 34
6 56