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

时间:2015-11-26 10:24:22

标签: lua luaj

我尝试了luaj提供的实用程序方法,用命令行args调用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表(虽然我&lt; table.getn(arg)做) - 我尝试了其他的例子,它们都导致了同样的错误 - luaj没有似乎正确地设置了“arg”表 - 即使简单的打印arg [1]也不起作用。

2 个答案:

答案 0 :(得分:0)

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

尽管如此,代码格式化程序并没有真正按照我的预期进行操作

答案 1 :(得分:0)

有两个问题:

  • table.getn(arg)的调用应替换为 #arg
  • luaj 3.0.1没有正确设置chunk的环境,所以 arg 没有设置

但是,作为一种变通方法,您可以使用varargs&#34; ...&#34;捕获输入。语法是在 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