第9章 闭包
在Lua语言中,函数是严格遵循词法定界(可以访问包含其自身的外部函数中的变量)的第一类值(如数值和字符串)。
在 Lua 语言中,所有的函数都是匿名的。函数名实际上指的是保存该函数的变量。像函数 table.sort 这样以另一个函数为参数的函数,称为高阶函数。
local fact1 = function(n) if n == 0 then return 1 else return n * fact1(n - 1) --attempt to call a nil value (global 'fact1') end end local fact2 fact2 = function(n) if n == 0 then return 1 else return n * fact2(n - 1) --OK end end local function fact3(n) --会被展开成fact2的形式 if n == 0 then return 1 else return n * fact3(n - 1) --OK end end
local f local function g () print("call g") f() end function f () --不能定义为local,否则将定义一个新的f,从而使前面的f变成为定义的状态 print("call f") end g()