日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

lua工具库penlight--08额外的库(二)

發布時間:2023/12/4 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lua工具库penlight--08额外的库(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

執行一系列的參數

類型說明符也可以?'?('MIN?'..'?MAX)'?的形式

?local?lapp?=?require?'pl.lapp'

?local?args?=?lapp?[[

?????Setting?ranges

?????<x>?(1..10)??A?number?from?1?to?10

?????<y>?(-5..1e6)?Bigger?range

?]]

?

?print(args.x,args.y)

?

下面的意思是或等于?MIN?和小于或等于MAX?;沒有規定強制參數必須是整數。

類型說明符也可以定義自定義類型,

?lapp?=?require?('pl.lapp')

?

?lapp.add_type('integer','number',

?????function(x)

?????????lapp.assert(math.ceil(x)?==?x,?'not?an?integer!')

?????end

?)

?

?local?args?=??lapp?[[

?????<ival>?(integer)?Process?PID

?]]

?

?print(args.ival)

?

lapp.add_type需要三個參數類型名稱、?轉換器和約束函數。約束函數有一個斷言,如果某些條件不成立;我們使用?lapp.assert,因為條件不服合命令行腳本的標準(譯注:即不符合條件就終止)。轉換器參數可以是已知的?Lapp?或一個函數,可以從字符串生成一個值。

'?varargs'?參數組

?lapp?=?require?'pl.lapp'

?local?args?=?lapp?[[

?Summing?numbers

?????<numbers...>?(number)?A?list?of?numbers?to?be?summed

?]]

?

?local?sum?=?0

?for?i,x?in?ipairs(args.numbers)?do

?????sum?=?sum?+?x

?end

?print?('sum?is?'..sum)

?

尾隨參數的'...'指示此參數是一個?'varargs'?參數。它必須是最后一個參數,并且?args.number?將是一個數組。

考慮下面?Mac?OS?x中的頭實用程序實現

?--?implements?a?BSD-style?head

?--?(see?http://www.manpagez.com/man/1/head/osx-10.3.php)

?

?lapp?=?require?('pl.lapp')

?

?local?args?=?lapp?[[

?Print?the?first?few?lines?of?specified?files

????-n?????????(default?10)????Number?of?lines?to?print

????<files...>?(default?stdin)?Files?to?print

?]]

?

?--?by?default,?lapp?converts?file?arguments?to?an?actual?Lua?file?object.

?--?But?the?actual?filename?is?always?available?as?<file>_name.

?--?In?this?case,?'files'?is?a?varargs?array,?so?that?'files_name'?is

?--?also?an?array.

?local?nline?=?args.n

?local?nfile?=?#args.files

?for?i?=?1,nfile?do

?????local?file?=?args.files[i]

?????if?nfile?>?1?then

?????????print('==>?'..args.files_name[i]..'?<==')

?????end

?????local?n?=?0

?????for?line?in?file:lines()?do

?????????print(line)

?????????n?=?n?+?1

?????????if?n?==?nline?then?break?end

?????end

?end

?

因為自動生成字段files_name?,也是一個數組,我們要注意如何訪問所有的文件名

(這腳本可能不很周到,因為?Lapp?將打開所有提供的文件,并僅在腳本結束時關閉它們。請參見另一個xhead.lua示例)

標志和選項可能也被宣布為?vararg?數組,并可以發生在任何地方。記住,短的選項可以組合(如?tar?-xzf,所以'-vvv'是完全合法?。但通常的?args.v?值只是一個簡單true值。

?local?args?=?require?('pl.lapp')?[[

????-v...??Verbosity?level;?can?be?-v,?-vv?or?-vvv

?]]

?vlevel?=?not?args.v[1]?and?0?or?#args.v

?print(vlevel)

?

vlevel?賦值有點?Lua?特色,所以考慮案件:

?*?No?-v?flag,?v?is?just?{?false?}

?*?One?-v?flags,?v?is?{?true?}

?*?Two?-v?flags,?v?is?{?true,?true?}

?*?Three?-v?flags,?v?is?{?true,?true,?true?}

?

定義參數的回調

如果一個腳本實現了lapp.callback,然后?Lapp?每個參數解析后調用它。回調被傳遞參數名稱、?未分析的原始值和結果表。它會在賦值后立即調用所以相應的字段是可用

?lapp?=?require?('pl.lapp')

?

?function?lapp.callback(parm,arg,args)

?????print('+',parm,arg)

?end

?

?local?args?=?lapp?[[

?Testing?parameter?handling

?????-p???????????????Plain?flag?(defaults?to?false)

?????-q,--quiet???????Plain?flag?with?GNU-style?optional?long?name

?????-o??(string)?????Required?string?option

?????-n??(number)?????Required?number?option

?????-s?(default?1.0)?Option?that?takes?a?number,?but?will?default

?????<start>?(number)?Required?number?argument

?????<input>?(default?stdin)??A?parameter?which?is?an?input?file

?????<output>?(default?stdout)?One?that?is?an?output?file

?]]

?print?'args'

?for?k,v?in?pairs(args)?do

?????print(k,v)

?end

?

這將生成以下輸出:

?$?args?-o?name?-n?2?10?args.lua

?+???????o???????name

?+???????n???????2

?+???????start???10

?+???????input???args.lua

?args

?p???????false

?s???????1

?input_name??????args.lua

?quiet???false

?output??file?(781C1B98)

?start???10

?input???file?(781C1BD8)

?o???????name

?n???????2

?

當你解析參數完畢后,回調函數可以用來立即處理

?

寬松模式

如果您想要使用多字母?''?參數則需要將lapp.slack變量設置為true.

在下面的示例中我們也看到如何使用默認false默認true標志,以及如何覆蓋默認-h幫助標志?(—help仍然正常工作)?—?—?這適用于非寬松模式下。

?--?Parsing?the?command?line?----------------------------------------------------

?--?test.lua

?local?lapp?=?require?'pl.lapp'

?local?pretty?=?require?'pl.pretty'

?lapp.slack?=?true

?local?args?=?lapp?[[

?Does?some?calculations

????-v,?--video??????????????(string)?????????????Specify?input?video

????-w,?--width??????????????(default?256)????????Width?of?the?video

????-h,?--height?????????????(default?144)????????Height?of?the?video

????-t,?--time???????????????(default?10)?????????Seconds?of?video?to?process

????-sk,--seek???????????????(default?0)??????????Seek?number?of?seconds

????-f1,--flag1???????????????????????????????????A?false?flag

????-f2,--flag2???????????????????????????????????A?false?flag

????-f3,--flag3??????????????(default?true)???????A?true?flag

????-f4,--flag4??????????????(default?true)???????A?true?flag

?]]

?

?pretty.dump(args)

?

在這里我們可以看到test.lua的輸出:

?$>?lua?test.lua?-v?abc?--time?40?-h?20?-sk?15?--flag1?-f3

?---->

?{

???width?=?256,

???flag1?=?true,

???flag3?=?false,

???seek?=?15,

???flag2?=?false,

???video?=?abc,

???time?=?40,

???height?=?20,

???flag4?=?true

?

總結

以上是生活随笔為你收集整理的lua工具库penlight--08额外的库(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。