在Lua中,函數是一種「第一類值」:表示在Lua中的函數與其餘傳統類型的值(例如:數字和字符串)是同樣的,能夠存儲到變量(全局,局部都可)或table中,能夠做爲實參傳遞給其餘函數,還能夠做爲其餘函數的返回值。函數
「詞法域」:指一個函數能夠嵌套在另外一個函數中,內部的函數能夠訪問外部函數中的變量。lua
Lua中的函數與全部其餘值同樣都是匿名的,當討論一個函數時,其實是在討論一個持有某函數的變量。這與變量持有各類值一個道理,能夠以多種方式來操做這些變量。spa
a = {p = print} a.p("Hello World") --->Hello World print = math.sin --->print如今引用了正弦函數。 a.p(print(1)) ---->0.841470 sin = a.p --->sin 如今引用了print函數。 sin(10,20) ---->10 20
Lua中的函數能夠理解成由一些表達式建立的,所以一個函數的定義實際就是一條賦值語句,這條語句建立了一種類型爲「函數」的值,並將這個值賦予一個變量。code
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)將返回其導數。