LuaJ 没有正确提供命令行参数

LuaJ does not supply command line arguments correctly

我尝试了 luaj 提供的实用方法来调用带有命令行参数的 lua 文件(这个 http://lua-users.org/wiki/SourceCodeFormatter

Globals globals = JsePlatform.standardGlobals();        
String script ="src/codeformatter.lua";
File f = new File(script);
LuaValue chunk = globals.loadfile(f.getCanonicalPath());
List<String> argList = Arrays.asList("--file","test.lua");                          
JsePlatform.luaMain(chunk, argList.toArray(new String[argList.size()]));

但是我总是尝试调用 nil 代码试图访问 arg table(而我 < table.getn(arg) 做) - 我尝试了其他示例,它们都导致同样的错误 - luaj 似乎没有正确设置 "arg" table - 即使简单地打印 arg[1] 也不起作用。

LuaJ 不再支持 table.getn 因为它在 lua 5.1 中被删除 - 用 #varname 替换每个出现的 table.getn - 并用 ocal args={ 初始化 args 数组...} 在顶部使它起作用。

不过,代码格式化程序并没有真正按照我的预期去做

有两个问题:

  • table.getn(arg) 的调用应替换为 #arg
  • luaj 3.0.1 未正确设置块的环境,因此未设置 arg

但是,作为解决方法,您可以使用可变参数“...”语法捕获输入,方法是在 codeformatter.lua 的顶部添加一行,例如

arg = {...}

这里有一个代码片段来说明:

Globals globals = JsePlatform.standardGlobals();   
LuaValue chunk = globals.load(
        "arg = {...};" +
        "print(#arg, arg[1], arg[2])");
JsePlatform.luaMain(chunk, new String[] {"--file","test.lua"});

产生输出:

2   --file  test.lua