在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)将返回其导数。