yyqng

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

第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()

 

posted on 2021-02-21 22:33  zziii  阅读(89)  评论(0编辑  收藏  举报