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」;這個函數的調用不會引發棧溢出。

相關文章
相關標籤/搜索