Lua學習筆記05 深入函式 一

2021-10-04 20:21:16 字數 1373 閱讀 3299

一、lua中函式也為第一類值:函式也可以儲存到變數、table中;它可以作為實參傳遞給其他函式,也可以作為其他函式的返回值;詞法域:乙個函式可以巢狀到另乙個函式中,內部的函式可以訪問外部函式的變數;函式與其他值一樣都是匿名的,lua中的函式只是乙個持有某函式方法的變數,函式名類似於變數名,我們也可以用多種方式來操作乙個函式

例:a=

a.p("hello")-->與print("hello")相同

----------------------------------------

a=print=math.sin

a.p(print(math.pi/2))

結果為1

----------------------------------------

a=sin=a.p

sin(10,20,30)

1、乙個函式定義就是一條賦值語句

例:function foo(x) return 2*x end  (1)等價於  foo=function(x) return 2*x end(2)

(2)相當於建立了乙個型別為函式的值,foo的型別為乙個函式;可以將(2)等號後面的函式表示式視為函式構造式,如果只有該函式表示式的話,則稱其為匿名函式

2、table庫中有乙個函式sort,格式為table.sort(table引數,次序函式(匿名函式)),用於對括號內的table引數變數進行排序,可以根據次序函式中提供的兩個值來決定在有序情況下第乙個元素是否應該排在第二個元素之前,次序函式是可選的,可以新增也可以不新增

例:network=,,}

table.sort(network,function(a,b) return (a.name>b.name) end)(根據network中的名字來進行排序)

3、像table.sort這樣能接收其他函式返回值作為實參的函式稱為高階函式;高階函式是一種強大的程式設計機制,運用匿名函式來建立高階函式所需的實參可以帶來更大的靈活性,但高階函式本身無任何特權

二、閉合函式:如果乙個函式a寫在另乙個函式b中,那麼這個函式a便可以訪問外部函式b的區域性變數,這項特徵稱之為詞法域 

形參也是一種區域性變數

在乙個內部函式a中對另乙個函式b進行修改時,內部函式a改變了函式b的用法,在內部函式a以外,函式b的用法也將被改變

例:function sortbygrade(name,grades)

table.sort(names,function(n1,n2) return grades[n1]>grades[n2] end)-->這裡面的grades稱為非區域性的變數

end假設要重新定義函式sin,使其引數能使用角度來替換原先的弧度。那麼這個新函式就必須得轉換他的實參,並呼叫原來的sin函式完成真正的計算。將老版本的sin儲存到了乙個私有變數中,現在只有通過新版本的sin才能訪問它了。

lua學習筆記05

函式 函式有兩種用途 1.完成指定的任務,這種情況下函式作為呼叫語句使用 2.計算並返回值,這種情況下函式作為賦值語句的表示式使用。語法 function func name arguments list statements list end 呼叫函式的時候,如果引數列表為空,必須使用 表明是函式...

Lua學習筆記函式

數字型for 的格式,exp3預設為1 for var exp1 exp2 exp3 do 執行體 end泛型for迭代的型別,標準庫中提供了幾種迭代器 io.lines 用於迭代檔案中每行 pairs 迭代table中元素 ipairs 迭代 陣列 元素 string.gmatch 迭代字串中單詞...

Lua學習筆記 函式

1.函式宣告語法 function func name arguments list statements list end 首先說明一點,lua中函式是第一類值,和其他的型別 table,number,boolean等 一樣,所以可以作為函式的引數,table的鍵和值。2.函式呼叫 直接使用函式名...