在 Lua 中使用引數技巧

大雄45發表於2023-03-28
導讀 大多數計算機 由兩部分組成: 和引數。命令是要執行的程式,而引數可能是命令選項或使用者輸入。如果沒有這種結構,使用者將不得不編輯命令的程式碼,以改變命令所處理的資料。

想象一下重寫 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,它們為解析引數提供了額外的基礎設施。

原文來自:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2929386/,如需轉載,請註明出處,否則將追究法律責任。

相關文章