阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

在 Lua 中使用参数技巧

50次阅读
没有评论

共计 1542 个字符,预计需要花费 4 分钟才能阅读完成。

导读 大多数计算机命令由两部分组成:命令和参数。命令是要执行的程序,而参数可能是命令选项或用户输入。如果没有这种结构,用户将不得不编辑命令的代码,以改变命令所处理的数据。

想象一下重写 ​​printf​​​ 命令只是为了让你的计算机用“hello world”消息问候你。参数对于交互式计算至关重要,​​Lua 编程语言​​​ 提供了 ​​{...}​​ 表达式来封装在启动 Lua 脚本时给定的可变参数。

在 Lua 中使用参数

几乎每一个给计算机的命令都假定一个参数,即使它期望参数是一个空列表。Lua 会记录启动后写入的内容,即使你可能对这些参数不做任何操作。要在 Lua 启动时使用用户提供的参数,请迭代 ​​{…}​​ 表:

local args = {...}for i,v in ipairs(args) do print(v)end

运行代码:

$ lua ./myargs.lua$ lua ./myargs.lua foo --bar bazfoo--barbaz----

参数是不安全的,Lua 会完全按照输入的方式打印所有参数。

解析参数

对于简单的命令,Lua 的基本功能足以解析和处理参数。这是一个简单的例子:

-- setuplocal args = {...}-- enginefunction echo(p) print(p)end-- gofor i,v in ipairs(args) do print(i .. ":" .. v)endfor i,v in ipairs(args) do if args[i] == "--say" then echo("echo:" .. args[i+1]) endend

在 ​​setup​​ 部分,将所有命令参数转储到名为 ​​args​​ 的变量中。

在 ​​engine​​ 部分,创建一个名为 ​​echo​​ 的函数,用于打印你“输入”其中的任何内容。

最后,在 ​​go​​ 部分,解析 ​​args​​ 变量(用户在启动时提供的参数)中的索引和值。在此示例代码中,为清楚起见,第一个 ​​for​​ 循环仅打印每个索引和值。

第二个 ​​for​​ 循环使用索引来检查第一个参数,它被假定是一个选项。此示例代码中唯一有效的选项是 ​​–say​​。如果循环找到字符串 ​​–say​​,它会调用 ​​echo​​ 函数,并将当前参数的索引 加 1(下一个 参数)作为函数参数提供。

命令参数的分隔符是一个或多个空格。运行代码查看结果:

$ lua ./echo.lua --say zombie apocalypse1: --say2: zombie3: apocalypseecho: zombie

大多数用户都知道在向计算机发出命令时空格很重要,因此在这种情况下删除第三个参数是预期的行为。下面是演示两种有效“转义”方法的变体:

$ lua ./echo.lua --say "zombie apocalypse"1: --say2: zombie apocalypseecho: zombie apocalypse$ lua ./echo.lua --say zombie\ apocalypse1: --say2: zombie apocalypseecho: zombie apocalypse
解析参数

手动解析参数简单且无依赖性。但是,你必须考虑一些细节。大多数现代命令都允许使用短选项(例如,​​-f​​)和长选项(​​–foo​​),并且大多数命令都提供 ​​-h​​ 或 ​​–help​​ 或者在没有所需参数时显示帮助菜单。

使用 ​​LuaRocks​​ 可以轻松安装其他库。有一些非常好的工具,例如 ​​alt-getopt​​,它们为解析参数提供了额外的基础设施。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计1542字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中