一、Lua 中的函数
Lua 中的函数是第一类值。意味着和其他的常见类型的值(例如数值和字符串)具有同等权限。
举个例子,函数也可以像其他类型一样存储起来,然后调用
-- 将 a.p 指向 print 函数
a = {
p = print }
-- 使用 a.p 函数
a.p("jiangpengyong") ---> jiangpengyong
二、匿名函数
正常情况下,我们定义一个函数是下面代码这样的
function foo1()
print("Foo1 called.")
end
然而,其实可以写成下面这样,将函数赋值给一个变量,这样 foo 就是一个函数类型的变量了。
foo = function(x)
return x * x
end
其实 Lua 的函数就是一个 function
类型的变量(可以查看之前的文章“Lua 数据类型 —— 函数”)。第一种方式变量名即为函数名(foo1),第二种则为变量名(foo)
因为函数是一个变量,所以也可以进行判断类型,删除变量等操作。
foo = function(x)
return x * x
end
print(foo(2)) --> 4
print("type(foo)", type(foo)) --> type(foo) function
function foo1()
print("Foo1 called.")
end
foo1() --> Foo1 called.
print("type(foo1)", type(foo1)) --> type(foo1) function
foo1 = nil
--foo1() -- attempt to call a nil value (global 'foo1')
print("type(foo1)", type(foo1)) --> type(foo1) nil
三、高阶函数
以另一个函数作为参数的函数,即为高阶函数。
其实这只是 Lua 函数作为第一类值特性的一个表现,并不是新的特性。
举个例子:
这里编写一个导数函数
f`(x) = (