LUA Learning Note 5 : 函数

--闭合函数:一个函数加上该函数所需访问的全部”非局部的变量“。 函数

function count()
    local i = 0;
    return function()
              i = i + 1;
              return i;
           end spa

end 调试

--这个count函数会返回另一个函数,重点是,这个返回的函数会使用count函数的局部变量。 io

--local i就属于一个非局部变量,由于它既不是全局变量,也不是单纯的局部变量(由于另一个函数能够反问到它)。 function

--因此每次调用闭合函数,非局部变量的值都不会被重置。 变量

------------------------------------------------------------------------------------------------------------------- 语法

--非全局函数: co

local function mutou() background

end return

--介绍一个“语法糖”,上面的mutou函数,
local mutou;
mutou = function ()
end

--这就是咱们函数的真实面貌,函数名称其实也是一个变量名而已。
-------------------------------------------------------------------------------------------------------------------

-- 尾调用:一个函数的调用是另外一个函数的最后一个动做时,这个调用就称之为尾调用。

function mutou()
    return count();
end

-- 若是在 return count()+1; 进行加1操做,则这个不属于尾调用。

--尾调用有什么意义

--进行尾调用时不会耗费多余的栈空间,好比这样一个经典的函数

function foo(n)
    if n > 0 then
        return foo(n - 1);
   else
        return "end";
    end
end
-- 进行调试:print(foo(999)),会得出结果“end”;这个函数的调用不会引发栈溢出。

相关文章
相关标签/搜索