Luac无法处理一个脚本。

我已经嵌入了 Lua 并且想要将脚本预编译。为此,我调用了 luac 的 main 函数(参数 argc 为 1)。我的问题在于 luac 的 doargs 函数。我不理解变量 i 的用途。因为当我使用一个脚本时,在 doargs 函数之后,i 的结果是 1。之后在 main 函数中又执行了 argc -= i。因此 argc = 0,我收到了“没有文件”的错误提示。有任何想法吗?

点赞
用户1632532
用户1632532

luac 旨在作为一个编译 .lua 文件的命令行实用工具。这就是为什么你会收到一个错误的原因。

当你启动一个可执行文件时,操作系统将程序名称作为其第一个参数传递( argv[0])。luac 主函数假定它是由操作系统调用的,因此它期望至少有一个参数,并且它的 argv[0] 将是可执行文件的名称。

因此,doargs 从 1 开始循环,并始终忽略第一个(0th)参数。它返回它处理的选项数量,这也是 argv 数组中第一个文件名的偏移量。主函数使用这个值来确定文件列表从哪里开始。

如果你真的想使用主函数预编译你的脚本,那么在你的参数数组的开头提供一个额外的虚拟参数,并在此之后列出你的文件。最好的方式是使用命令行中的 luac 并提供一个输出文件,重编译后的脚本将储存在那里,像这样:

luac -o outputFile script.lua

或者,查看 Programming in Lua 第 8 章(编译,执行和错误)中的纯 Lua 解决方案,或者参考参考手册中的 luaL_dofileluaL_dostringlua_dumplua_load 函数,以获取 C API 解决方案。

2014-07-28 13:43:40