中国建设银行网站特点,申请自己的网站空间,微信开发者工具开发小程序,抖音代运营商业模式一、什么是LuaJava
LuaJava是一个Java脚本工具。该工具的目标是允许用Lua编写的脚本操纵用 Java开发的组件。LuaJava允许使用与访问Lua的本机对象相同的语法从Lua访问Java组件#xff0c;而不需要任何声明或任何类型的预处理。
LuaJava还允许在Lua中实现任何Java接口#x…一、什么是LuaJava
LuaJava是一个Java脚本工具。该工具的目标是允许用Lua编写的脚本操纵用 Java开发的组件。LuaJava允许使用与访问Lua的本机对象相同的语法从Lua访问Java组件而不需要任何声明或任何类型的预处理。
LuaJava还允许在Lua中实现任何Java接口并将其作为参数传递给任何方法当调用时Lua中将调动等效函数并将结果传递会Java。
LuaJava与Lua5.1的许可证相同也就是说它可以免费用于学术和商业目的。
二、Maven依赖引用 !-- https://mvnrepository.com/artifact/party.iroiro.luajava/luajava --dependencygroupIdparty.iroiro.luajava/groupIdartifactIdluajava/artifactIdversion4.0.2/version/dependency!-- https://mvnrepository.com/artifact/party.iroiro.luajava/lua54 --dependencygroupIdparty.iroiro.luajava/groupIdartifactIdlua54/artifactIdversion4.0.2/version/dependency!-- https://mvnrepository.com/artifact/party.iroiro.luajava/lua54-platform --!--dependencygroupIdparty.iroiro.luajava/groupIdartifactIdlua54-platform/artifactIdversion4.0.2/versiontypepom/type/dependency--dependencygroupIdparty.iroiro.luajava/groupIdartifactIdlua54-platform/artifactIdversion4.0.2/versionclassifiernatives-desktop/classifierscoperuntime/scope/dependency
三、LuaJava包含两组Java API
围绕Lua C API的薄包装。因此您需要对Lua C API有一些基本的了解。大多数API名称在驼峰命名法中被重命名去掉lua_或luaL_前缀。
此外如果您对API这是Lua5.*版本之间的交叉点不满意可以通过Lua#getLuaNatives直接使用 Lua C API绑定。
更加Java话的API。这需要更少的Lua知识。请参阅Java API。
四、支持的Lua版本
支持的Lua版本有Lua 5.1、Lua 5.2、Lua 5.3、Lua 5.4、LuaJ和LuaJIT。
五、Java API
Java API主要围绕着party.iroiro.luajava.Lua接口和party.iroiro.luajava.value.LuaValue接口设计。
首先只需要使用以下任何构造函数获取Lua状态
new Lua51()new Lua52()new Lua53()new Lua54()new LuaJit()new LuaJ()
关闭状态
Lua L new Lua51();
// Operations
L.close();// Or
try (Lua J new Lua51()) {// Operations
}默认情况下Lua状态仅由Java库加载。要使用string、table或coroutine你需要显式打开这些库
openLibraries 打开所有可用库openLibrary 打开指定的库
要与Lua值交互可以使用LuaValue接口或直接使用Lua C API绑定 Testpublic void test(){try (Lua L new Lua54()) {LuaValue[] returnValues L.eval(return { a 1 }, 1024, my string value);assertEquals(3, returnValues.length);assertEquals(1, returnValues[0].get(a).toInteger());assertEquals(1024, returnValues[1].toInteger());assertEquals(my string value, returnValues[2].toString());}}获取全局变量、设置全局变量 Testpublic void getGlobalVar(){try(Lua lua new Lua54()) {assertEquals(Lua 5.4, lua.get(_VERSION).toString());LuaValue value lua.from(1);lua.set(a, value); // LuaValuelua.set(b, 2); // Java Integerlua.set(c, new BigDecimal(3)); // Any Java objectassertEquals(6,lua.eval(return a b c:longValue())[0].toInteger());}}要从简单的 Java值创建LuaValue请使用Lua::from(boolean/double/long/String) 或 Lua::fromNull().
Testpublic void getLuaValues() {try (Lua L new Lua54()) {LuaValue value L.from(1);L.set(a, value); // LuaValueL.set(b, 2); // Java IntegerL.set(c, new BigDecimal(3)); // Any Java objectassertEquals(6,L.eval(return a b c:longValue())[0].toInteger());}}要运行Lua代码并获取返回值请使用Lua::eval(String) Testpublic void getEval() {try (Lua L new Lua54()) {L.openLibraries();LuaValue[] values1 L.eval(string.sub(abcdefg, 0, 3));assertEquals(0, values1.length);LuaValue[] values2 L.eval(return string.sub(abcdefg, 0, 3));assertEquals(abc, values2[0].toString());}}LuaValues实现了Java Map接口并允许直接操作Lua tables. Testpublic void getTable() {try (Lua L new Lua54()) {L.run(t { text abc, children { a, b, c } });LuaValue table L.eval(return t)[0];// Get-calls return LuaValues.assertEquals(abc, table.get(text).toString());LuaValue children table.get(children);// Indices are 1-based.assertEquals(a, children.get(1).toString());assertEquals(3, children.size());// Set-calls accept LuaValues or any Java object.children.set(4, d);// Changes are done in the Lua side.L.run(assert(t.children[4] d));}}调用lua函数使用LuaValue::call(…)调用函数并返回 LuaValue Testpublic void getLuaValue() {try (Lua L new Lua54()) {L.openLibrary(string);LuaValue gsub L.eval(return string.gsub)[0];LuaValue luaJava gsub.call(Lua, a, aJava)[0];assertEquals(LuaJava, luaJava.toString());}}使用LuaValue::toProxy创建java代理 Testpublic void getRunnable() throws InterruptedException {try (Lua L new Lua54()) {LuaValue runnable L.eval(return { run function() print(running...) end })[0];Runnable r runnable.toProxy(Runnable.class);Thread t new Thread(r);t.start();t.join();}}Lua GitHubhttps://github.com/gudzpoz/luajava
Lua官方文档https://gudzpoz.github.io/luajava/
开源SDKhttps://github.com/mingyang66/spring-parent