1

我正在寻找读取 Lua 命令行参数的 C 示例代码。有什么帮助吗?

4

1 回答 1

5

Lua 解释器被设计为嵌入到宿主应用程序中。应用程序有责任通过某种适当的机制将任何命令行参数(或应用程序的等效参数)传递给脚本。

当用作独立语言时,宿主应用程序是可执行文件lua,由lua.cLua 源代码发行版实现。

当它开始时,将lua所有命令行参数arg以数组的形式捆绑到全局变量中。arg[0]包含正在执行的脚本文件的名称,arg[1]然后包含在命令行上传递给该脚本的任何参数。它还将命令行的余额存储在arg表中的负索引处。对于命令lua sample.lua a b c,数组的构造就像赋值一样

arg = { [-1]="lua", [0]="sample.lua", "a", "b", "c" }

在脚本执行之前执行。此分配由 function 执行getargs(),它还将脚本参数保留在 Lua 堆栈中,以便脚本也可以通过关键字将它们作为脚本顶级函数的可变参数访问...

如果脚本中使用的任何模块需要访问命令行参数,那么它很可能会从全局arg表中执行此操作。无论模块是用 C 还是 Lua 编写的,这都适用。访问arg全局变量需要模块的环境没有被改变以防止访问全局变量。

我没有解决重要的整体设计问题,即允许模块依赖命令行参数是否是好的设计。我可以看到提供参数解析的模块可能希望以这种方式做事,但即便如此,我还是建议选项解析器由其调用者传递参数,而不是直接从全局读取它们。例如,这使得从环境变量或配置文件中检索参数变得更加容易。

于 2010-09-20T20:54:03.847 回答