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
我尝试了 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