在Lua中, 我们用到的函数, 其实是一个数据类型, 例如 :
[root@db-172-16-3-150 ~]# lua
Lua 5.2.3 Copyright (C) 1994-2013 Lua.org, PUC-Rio
> print(type(print))
function
> print(type(function() end))
function
> print(type({}))
table
> print(type("hello"))
string
> print(type(1.2))
number
函数的定义构造器function () end, 和表的构造器{}一样. 都只是个构造器.
所以函数可以存储在变量中, 本地变量或者全局变量或者表的元素中都可以. 因此函数的定义实际上是匿名的, 如果没有赋值的过程.
function (x)
return x*2
end
这其实是个匿名函数.
赋值给一个变量的写法 :
同时, 系统自定义的函数变量, 也可以被覆盖: 例如, print函数.
函数还可以作为返回值, 例如 :
把函数存储在一个表的元素中的例子 :
double =
function (x)
return x*2
end
或者
function double (x)
return x*2
end
同时, 系统自定义的函数变量, 也可以被覆盖: 例如, print函数.
> print = function() end
> print("hello")
函数还可以作为返回值, 例如 :
function derivative(f, delta)
delta = delta or 1e-4
return function (x)
return ( f(x+delta) - f(x) ) / delta
end
end
这个函数的返回值为一个匿名函数,
function (x)
return ( f(x+delta) - f(x) ) / delta
end
所以如下表达式是把这个匿名函数赋予给一个变量.
c = derivative(math.sin)
即
c = function (x)
return ( math.sin(x+delta) - math.sin(x) ) / 1e-4
end
例子 :
> = c(1)
0.54026023141862
把函数存储在一个表的元素中的例子 :
> arr = {}
> arr.x = c
> arr.x(1)
> = arr.x(1)
0.54026023141862