91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Lua程序設計之深入函數

發布時間:2020-08-10 15:38:01 來源:網絡 閱讀:594 作者:firekido 欄目:開發技術

先看一個函數:

function derivative(f,delta)

    delta = delta or1e-4

    return function(x)

        return (f(x+delta)-f(x))/delta

    end

end 

對特定的函數f調用derivative(f)將(近似地)返回其導數,例如

c=derivative(math.sin)

print(math.cos(10),c(10))  --c(10)這樣的調用相當于derivative(math.sin)(10)

這個例子最讓我驚奇的是,10這個參數可以直接通過(10)的方式傳進去里面嵌套的函數。


1. 閉合函數,closure,就是一個函數加上該函數所需訪問的所有非局部的變量


2. 非局部的變量,就是在內部嵌套函數可以訪問的位于其外部嵌套環境中的局部變量,即不是全局變量也不是局部變量。即上面例子中的delta或者下面例子中的i。

例子:

    Function newCounter()

        local i= 0 –非局部變量

        return function()

            i= i+1

        return i

    end 

c1 =newCounter()  -- not c1 = newCounter,

Print(c1())  --1  相當于 newCounter()() 

Print(c1())  --2  相當于 newCounter()()

    由于創建變量i的函數(newCounter)已經返回,所以之后的每次調用每次調用匿名函數時,i都應是已經超出了作用范圍,但其實lua會以closure的概念來正確地處理這種情況。

    在這里,不禁要問,這里的i是怎樣保存起來的,是類似于c++中的局部靜態變量嗎?     

    這里有一個答案來自網上:對于閉合函數而言,屬于它的非局部變量,并不是在調用它的時候臨時產生的,而是和它一起存在的。所以每次調用閉合函數,非局部變量的值都不會被重置。

 

3. 閉合函數的應用(重定義函數):沙盒


4. 由于閉合函數的特殊,我們需要注意兩種情況:a.非全局函數的調用順序(需要前向聲明嗎?)function func () … end的寫法只是一種語法糖,它相當于func = functionb.正確的尾調用。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

彰化市| 射洪县| 汶川县| 土默特右旗| 德清县| 镇平县| 云和县| 花莲市| 仙居县| 乡城县| 中西区| 雷州市| 天祝| 龙川县| 奉新县| 贡觉县| 泽州县| 广昌县| 登封市| 怀柔区| 漠河县| 四子王旗| 鄢陵县| 阳山县| 宁波市| 平和县| 绥棱县| 阳泉市| 柯坪县| 晋宁县| 辰溪县| 庆安县| 天柱县| 遂昌县| 合江县| 杭锦后旗| 杂多县| 新乡市| 澜沧| 平果县| 昌平区|