用 Lua 解析參數
大多數計算機命令由兩部分組成:命令和參數。命令是要執行的程序,而參數可能是命令選項或用戶輸入。如果沒有這種結構,用戶將不得不編輯命令的代碼,以改變命令所處理的數據。想象一下重寫 ??printf??? 命令只是為了讓你的計算機用 “hello world” 消息問候你。參數對于交互式計算至關重要,??Lua 編程語言??? 提供了 ??{...}?
? 表達式來封裝在啟動 Lua 腳本時給定的可變參數。
在 Lua 中使用參數
幾乎每一個給計算機的命令都假定一個參數,即使它期望參數是一個空列表。 Lua 會記錄啟動后寫入的內容,即使你可能對這些參數不做任何操作。要在 Lua 啟動時使用用戶提供的參數,請迭代 ??{...}?
? 表:
運行代碼:
參數是不安全的,Lua 會完全按照輸入的方式打印所有參數。
解析參數
對于簡單的命令,Lua 的基本功能足以解析和處理參數。這是一個簡單的例子:
在 ??setup?
? 部分,將所有命令參數轉儲到名為 ??args?
? 的變量中。
在 ??engine?
? 部分,創建一個名為 ??echo?
? 的函數,用于打印你“輸入”其中的任何內容。
最后,在 ??go?
? 部分,解析 ??args?
? 變量(用戶在啟動時提供的參數)中的索引和值。在此示例代碼中,為清楚起見,第一個 ??for?
? 循環僅打印每個索引和值。
第二個 ??for?
? 循環使用索引來檢查第一個參數,它被假定是一個選項。此示例代碼中唯一有效的選項是 ??--say?
?。如果循環找到字符串 ??--say?
?,它會調用 ??echo?
? 函數,并將當前參數的索引 加 1(下一個 參數)作為函數參數提供。
命令參數的分隔符是一個或多個空格。運行代碼查看結果:
大多數用戶都知道在向計算機發出命令時空格很重要,因此在這種情況下刪除第三個參數是預期的行為。下面是演示兩種有效“轉義”方法的變體:
解析參數
手動解析參數簡單且無依賴性。但是,你必須考慮一些細節。大多數現代命令都允許使用短選項(例如,??-f?
?)和長選項(??--foo?
?),并且大多數命令都提供 ??-h?
? 或 ??--help?
? 或者在沒有所需參數時顯示幫助菜單。
使用 ??LuaRocks?? 可以輕松安裝其他庫。有一些非常好的工具,例如 ??alt-getopt??,它們為解析參數提供了額外的基礎設施。