標籤:style io cti re c ar
在Lua中,函數是一種“第一類值”:表示在Lua中的函數與其他傳統類型的值(例如:數字和字串)是一樣的,可以儲存到變數(全域,局部均可)或table中,可以作為實參傳遞給其他函數,還可以作為其他函數的傳回值。
“詞法域”:指一個函數可以嵌套在另一個函數中,內部的函數可以訪問外部函數中的變數。
Lua中的函數與所有其他值一樣都是匿名的,當討論一個函數時,實際上是在討論一個持有某函數的變數。這與變數持有各種值一個道理,可以以多種方式來操作這些變數。
a = {p = print}a.p("Hello World") --->Hello Worldprint = math.sin --->print現在引用了正弦函數。a.p(print(1)) ---->0.841470sin = a.p --->sin 現在引用了print函數。sin(10,20) ---->10 20
Lua中的函數可以理解成由一些運算式建立的,因此一個函數的定義實際就是一條指派陳述式,這條語句建立了一種類型為“函數”的值,並將這個值賦予一個變數。
function foo(x) return 2*x end ======> foo = function(x) return 2*x end 可以將運算式“function(x) <body> end”視為一種函數的構造式,就像table的構造式{}一樣。將這種函數構造式的結果視為一個“匿名函數”。
可接受另一個函數作為實參的,稱其是一個“高階函數”。應用匿名函數來建立高階函數所需的實參則可以帶來更大的靈活性。
function derivative (f, delta) delta = delta or le - 4 return function(x) return (f(x + delta) - f(x)) / delta end end 對於特定的函數f調用derivative(f)將返回其導數。