2

我已经嵌入了 lua,我想预编译我的脚本。为此,我调用了 luac 的 main (使用 argc 文件数为 1)。我的问题出在 luac 的函数 doargs 上。我不明白变量 i 的用法。因为当我使用一个脚本时。doargs 函数后 i 的结果是 1。在 main 函数中,我们有 argc -= i 后。所以 argc = 0 我有一个错误“没有文件”。任何想法 ?

4

1 回答 1

2

luac旨在成为编译 .lua 文件的命令行实用程序。这种预期的用法是您收到错误的原因。

当您启动可执行文件时,操作系统将程序的名称作为其第一个参数 ( argv[0]) 传递。主luac函数假设它被操作系统调用,所以它期望总是至少有一个参数,它argv[0]是可执行文件的名称。

出于这个原因doargs,它的 for 循环从 1 开始,并且总是会忽略第一个(第 0 个)参数。它返回它处理了多少个选项,这也是argv数组中第一个文件名的偏移量。主函数使用它来了解文件列表的开始位置。

如果你真的想使用 main 函数来预编译你的脚本,那么在你的参数数组的开头提供一个额外的虚拟参数,然后列出你的文件。最好您应该luac从命令行使用并提供一个输出文件,预编译脚本将存储在该文件中,如下所示:

luac -o outputFile script.lua

或者,请查看第 8 章 Lua 编程(编译、执行和错误)以获得纯 Lua 解决方案,或参阅参考手册luaL_dofile中的、luaL_dostringlua_dumplua_load函数以获得 C API 解决方案。

于 2014-07-28T13:43:40.147 回答