我已经嵌入了lua,我想要预编译我的脚本。为此,我调用luac的main(用argc文件的数量是1)。我的问题是关于luac的功能doargs。我不理解变量i的使用。因为当我使用一个脚本时。在doargs函数之后的i的结果是1.并且在main函数中我们有argc - = i after。所以argc = 0,我有一个错误"没有文件"。有什么想法吗?
答案 0 :(得分:2)
luac
是一个用于编译.lua文件的命令行实用程序。这种预期用法是您收到错误的原因。
当您启动可执行文件时,操作系统会将程序名称作为其第一个参数(argv[0]
)传递。 luac
main函数假定操作系统正在调用它,因此它期望始终至少有一个参数,其argv[0]
将是可执行文件的名称。
因此doargs
将其for循环开始为1,并始终忽略第一个(第0个)参数。它返回已处理的选项数,也是argv
数组中第一个文件名的偏移量。 main函数使用它来知道文件列表的开始位置。
如果你真的想使用main函数预编译你的脚本,那么在你的参数数组的开头提供一个额外的伪参数,然后列出你的文件。最好从命令行使用luac
并提供一个输出文件,预编译的脚本将存储在这里:
luac -o outputFile script.lua
或者,看看Lua编程的第8章(Compilation, Execution, and Errors)是否有纯粹的Lua解决方案,或luaL_dofile
,luaL_dostring
,lua_dump
和Reference Manual中的lua_load
函数用于C API解决方案。