好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Lua中的閉包學習筆記

Lua中的閉包學習筆記

熱門標簽:清朝地圖標注哈爾濱 百度地圖標注早餐區域 怎么去除地圖標注 武漢外呼防封系統多少錢 漳州智云呼電話機器人 冀州市地圖標注 個人怎么在地圖標注需要的店鋪 新岸線智能電銷機器人 地圖標注大廈

之前介紹 Lua 的數據類型時,也提到過,Lua 的函數是一種“第一類值(First-Class Value)”。它可以:

存儲在變量或 table (例如模塊和面向對象的實現)里

復制代碼 代碼如下:

t = { p = print }
t.p("just a test!")

作為實參(也稱其為“高階函數(higher-order function)”)傳遞給其他函數調用

復制代碼 代碼如下:

t = {2, 3, 1, 5, 4}
table.sort(t, function(a, b) return (a > b) end)

作為其他函數的返回值

復制代碼 代碼如下:

function fun1(x) return fun2(x) end

函數在 Lua 里“第一類值”的特性,使它成為一種靈活,極具彈性的數據類型,同時,也讓它衍生出一些特殊的功能強大的語言機制:

閉包(closure)

Lua 中的函數是帶有詞法作用域(lexical scoping)的第一類值,也可以說是函數變量的作用域,即函數的變量是有一定的效用范圍的,變量只能在一定范圍內可見或訪問到。

例如如下代碼:

復制代碼 代碼如下:

function count()
    local uv = 0
    local function retfun()
        uv = uv + 1
        print(uv)
    end
    return retfun
end

上面函數 retfun 定義在函數 count 里,這里可以把函數 retfun 看作是函數 count 的內嵌(inner)函數,函數 count 視為函數 retfun 的外包(enclosing)函數。內嵌函數能訪問外包函數已創建的所有局部變量,這種特征就是上面所說的詞法作用域,而這些局部變量(例如上面的變量 uv)則稱為該內嵌函數的外部局部變量(external local variable)或 upvalue。

執行函數 count :

復制代碼 代碼如下:

c1 = count()
c1()            -- 輸出 1
c1()            -- 輸出 2

上面兩次調用 c1,會看到分別輸出 1 和 2。

對于一個函數 count 里的局部變量 uv,當執行完 "c1 = count()" 后,它的生命周期本該結束,但是因為它已成了內嵌函數 retfun 的外部局部變量 upvalue,返回的內嵌函數 retfun 以 upvalue 的方式把 uv 的值保存起來,因此可以正確把值打印出來。

這種局部變量在函數返回后會繼續存在,并且返回的函數可以正常調用那個局部變量,獨立執行其邏輯操作的現象,在 Lua 里稱之為閉包(closure)

之所以說閉包是一個獨立存在的個體,這個可以再把函數 count 賦給一個變量,然后執行看輸出效果:

復制代碼 代碼如下:

c2 = count()
c2()                --  輸出 1

c1 跟 c2 都是相同的函數體,不過輸出的值卻不一樣!這主要還是因為閉包是由相應函數原型的引用和外部局部變量 upvalue 組成。當調用函數造成 upvalue 值被改變時,這只會改變對應閉包的 upvalue 值,不會影響到其他閉包里的 upvalue 值,所以 c1 被調用 2 次后,外部局部變量 uv 的值的是 2,而新創建的 c2 初始的外部局部變量 uv 是 0,被調用之后會是 1。

您可能感興趣的文章:
  • Lua學習筆記之表和函數
  • Lua進階教程之閉包函數、元表實例介紹
  • Lua基礎教程之賦值語句、表達式、流程控制、函數學習筆記
  • Lua中的閉包小結
  • LUA中的閉包(closure)淺析
  • Lua學習筆記之函數、變長參數、closure(閉包)、select等
  • lua閉包的理解以及表與函數的幾種表達方法

標簽:濰坊 金昌 德宏 儋州 天門 天門 臺灣 宣城

巨人網絡通訊聲明:本文標題《Lua中的閉包學習筆記》,本文關鍵詞  Lua,中的,閉包,學習,筆記,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Lua中的閉包學習筆記》相關的同類信息!
  • 本頁收集關于Lua中的閉包學習筆記的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 91久久婷婷人人澡人人澡| 呦女网站呦女| 精品久久久久久| 久久精热| 久久国产片| 99欧美精品| 欧美猛色少妇XXXXXk黄| 91丨国产丨白浆秘?洗澡网站| 2021一卡2卡三卡4卡乱码不卡| 国精产品一码二码三M| 五月婷婷激情五月| 扒开粉嫩小泬舌头伸进去视频在线| 久久久久精品国产亚洲AV伦理| 一个人www免费看的视频| 无遮掩动漫| 国产丝袜控视频在线观看| 久久久久久免费一级A片| 国产精品久久久久久久久久久免费看 | 少扫一极免费一级A片| 日产VA免费看一二三四| 日本三级香港三级人妇r| 97国产精品人人爽人人做| 亚洲秘?AV无码一区二区qq群| 苏晴忘穿内裤坐公交车被揉到视频 | 内地毛片| 胖女人下边紧不紧| 免费观看18禁床震无遮挡网站| 16—17女人毛片毛片免费看| 军营呻吟娇喘np| 想要把你藏起来by一年放肆| 免费一级做a爰片久久毛片| 近親相姦中出し親子本庄瞳| futa百合高肉全h| 久久精品国内一区二区三区| 欧美日韩免费无码AAA17c| yy4470私人影院| 肌肉特警们的yd生活| 黄色污污的网站| 草莓视频在线观看40分钟| 办公室秘书nylon丝袜 女性| XXXX大荫茎XXXXX|