1.函數(shù)是一種對語句和表達式進行抽象的主要機制环葵。既可以完成某項特定的任務采呐,也可以只做一些計算并返回結果茴厉。
2.函數(shù)的所有參數(shù)需要放到一對圓括號中旅掂,即使沒有函數(shù)也必須寫出一對空的括號赏胚。但是有一種特殊的例外情況:一個函數(shù)若只有一個參數(shù),并且這個參數(shù)是一個字面字符串或table構造式商虐,那么圓括號可有可無觉阅。
3.Lua為面向對象式的調用也提供了一種特殊的語法——冒號操作符。o.foo()的另一種寫法是o:foo()秘车。
4.函數(shù)中的形參個數(shù)與實參個數(shù)不一致時典勇,“若實參多于形參,則舍棄多余的實參叮趴;若實參不足割笙,則多余的形參初始化為nil∶幸啵”
多重返回值
1.Lua允許函數(shù)返回多個結果伤溉。
2.只有當一個函數(shù)調用是一系列表達式中的最后一個元素或僅有一個元素時,才能獲得它的所有返回值谈火。這里所謂的“一系列”表達式值得是4種情況:多重賦值侈询、函數(shù)調用時傳入的實參列表,table構造式和return語句糯耍。
3.unpack舵鳞,特殊函數(shù)震檩,接受一個數(shù)組作為參數(shù),并從下標1開始返回該數(shù)組的所有元素:
變長參數(shù)
1.(...)三個點表示該函數(shù)可接受不同數(shù)量的實參蜓堕,即“變長參數(shù)”抛虏。變長參數(shù)前可以擁有任意數(shù)量的固定參數(shù),但固定參數(shù)必須放在變長參數(shù)前套才。
2.當一個函數(shù)要訪問它的變長參數(shù)時迂猴,仍需用到三個點,但此時它是作為表達式的背伴。表達式{...}表示一個由所有變長參數(shù)構成的數(shù)組沸毁。
3.Lua提供了專門用于格式化文本(string.format)和輸出文本的函數(shù)(io.write)。
4.在fwrite函數(shù)中傻寂,Lua會將實參先賦予固定參數(shù)息尺,余下的視為變長參數(shù)。
5.當變長參數(shù)中含有nil值時疾掰,需要用函數(shù)select來訪問變長參數(shù)搂誉,select(selector , ...)。如果selector為數(shù)字n静檬,函數(shù)返回變長參數(shù)的第n個可變實參勒葱;否則selector只能為字符串“#”,返回變長參數(shù)的總數(shù)(包括nil)巴柿。
具名實參
1.Lua中的參數(shù)傳遞機制是具有“位置性”的凛虽,及實參是通過在參數(shù)表中的位置與形參相匹配。但有時需要通過名稱來指定實參广恢,就需要函數(shù)能接受具有名稱的實參凯旋,此時就用到了table。
2.示例,window函數(shù)有一些必填參數(shù)至非,但是大部分參數(shù)是可選的钠署,此時就需要用具名實參。對必填參數(shù)進行檢查荒椭,或者為某些參數(shù)填默認值谐鼎。假設_window是真正用于創(chuàng)建新窗口的函數(shù),它具有“位置性”趣惠。那么window函數(shù)如下: