luaj——java程序中运行lua

时间:2025-02-14 14:23:43

环境搭建(Gradle)

  • 下载最新的luaj源码
  • 把源码的core、jse里面的代码文件添加到你的项目里面,可能需要处理合并冲突。
  • 添加bcel的引入,如下。
group 'LuaJTest'
version '0.1-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
  jcenter()
}

dependencies {
  testCompile group: 'junit', name: 'junit', version: '4.11'
  //bcel for LuaJ
  compile ':bcel:5.2'
}

为什么使用源码而不是jar:源码能够进行debug,能够理解具体的逻辑,能够增加更多的功能。

增加read()函数——Lua调用Java

read()功能就是能够读取console里面的输入内容。

Java 示例功能说明。

private static String read() {
        Scanner scanner = new Scanner();
        return ();
    }

具体实现
packagename/extend/

package ;

import ;
import .;
import .;
import .;
import .;

/**
 * BaseLib by Mislead on 2016/5/26.
 */
public class BaseLib {
  private . baseLib;
  private Globals globals;

  public BaseLib(. baseLib, Globals globals) {
    this.baseLib = baseLib;
    this.globals = globals;
  }

  public void extend(LuaValue env) {
    ("read", new read(baseLib));
  }

  // implements a read method to read the input line from console.
  final class read extends ZeroArgFunction {
    final . baseLib;

    public read(. baseLib) {
      this.baseLib = baseLib;
    }

    @Override public LuaValue call() {
      Scanner scanner = new Scanner();
      String result = ();
      return (result);
    }
  }
}

注册功能
.

// 需要把增加的功能添加到env
public LuaValue call(LuaValue modname, LuaValue env) {  
    ... some codes
    // to extend other methods
  new (this, globals).extend(env);

  next next;
  ("next", next = new next());
  ("pairs", new pairs(next));
  ("ipairs", new ipairs());

  return env;
}

使用示例

word  = read()
print(word)