在 Lua 中使用引數技巧
導讀 | 大多數計算機 由兩部分組成: 和引數。命令是要執行的程式,而引數可能是命令選項或使用者輸入。如果沒有這種結構,使用者將不得不編輯命令的程式碼,以改變命令所處理的資料。 |
想象一下重寫 printf 命令只是為了讓你的計算機用 “hello world” 訊息問候你。引數對於互動式計算至關重要,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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在SpringBoot中使用AOP——通知中的引數Spring Boot
- Golang中命名引數的高階使用技巧與例項分析Golang
- 《Lua-in-ConTeXt》08:引數列表解析Context
- 在 Linux中find命令使用技巧Linux
- 使用自定義委託來呼叫Lua中的多返回值和長引數型別函式型別函式
- C技巧:結構體引數轉成不定引數結構體
- Lua中呼叫ref和out修飾引數的函式/過載函式函式
- 探究 lua 在 Android 中的應用Android
- 在Linux中,linux核心引數如何修改?Linux
- pandas引數設定小技巧
- Metasploit設定VERBOSE引數技巧
- Metasploit設定HttpTrace引數技巧HTTP
- Metasploit設定LHOST引數技巧
- 在SQL Server 2008中的SP上使用表型別值引數MHSQLServer型別
- lua獲取字串中單引號之間的字串字串
- 關於逗號( , )在JS中的使用技巧JS
- 在瀏覽器中使用Lua語言:Fengari瀏覽器
- 關於C++中在模板引數中使用Lambda表示式的問題C++
- 在sqlnet.ora中設定引數限制使用者登入時間SQL
- 在Lua中實現Rust物件的繫結Rust物件
- 在Java程式中列印java執行時引數Java
- 使用自定義lua解析管理器呼叫lua指令碼中的table指令碼
- lua語法-變數的定義與使用變數
- SOLIDWORKS軟體引數化建模配合技巧Solid
- Flask開發技巧之引數校驗Flask
- redis中lua指令碼的簡單使用Redis指令碼
- java方法引數中萬用字元的使用Java字元
- .net 中的 Dto 引數封裝物件 使用封裝物件
- Java中main方法引數String[ ] args的使用JavaAI
- lua~IDEA中除錯lua指令碼Idea除錯指令碼
- 在lua中操作http請求有兩種方式HTTP
- 在.Net Web Api中使用FluentValidate進行引數驗證WebAPI
- 使用 Python 解析引數Python
- layer Tips引數使用
- 當儲存引數使用結構體時必備的開發技巧方式結構體
- Protobuf在微信小遊戲開發中的使用技巧遊戲開發
- 中介軟體:還在使用trim過濾請求引數嗎?
- livewire 中wire:click=test('中文引數')引數報錯