lua函数的一些性质
词法界定
词法定界指:嵌套的函数可以访问他外部函数中的变量。
第一类值
第一类值指:
可以被存放在变量中,
也可以存放在表中,
可以作为函数的参数,
还可以作为函数的返回值。
的值
function foo (x)
return 2*x
end
这段代码实际上就等效于
foo = function (x)
return 2*x
end
所以实际上lua中的函数声明语法实际上是一个函数声明+变量赋值过程,注意,lua中函数也是一个变量类型,function在lua中是第一类值
lua函数闭包的理解
lua中函数访问的外部局部变量被称作 upvalue,所以函数实际上是函数本身和它的upvalue。
lua函数尾调用
lua是可以做到正确的函数尾调用的
function f(x)
return g(x)
end
如上所示,f(x)的最后一个动作是调用g(x),这种情况下,g(x)不需要使用额外的栈,但并不是所有语言都可以做到正确的尾调用的
尾调用有一点需要注意,如果是函数递归尾调用,这种情况下,在lua中是永远也不会导致栈溢出的,如果线程卡死就需要额外排查一下是不是有地方无限尾递归了
注意,这种情况不是尾调用
function f (x)
g(x)
return
end