最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

LUA中的閉包(closure)淺析

 更新時間:2015年02月07日 20:47:13   投稿:junjie  
這篇文章主要介紹了LUA中的閉包(closure)淺析,本文給出實例講解LUA中的閉包,需要的朋友可以參考下

之前對closure一知半解,在網上也找不到一篇文章能把它說清楚,今天好像第一次對它有點清晰的了解 了,寫個BLOG記念一下

lua的函數是一種 First-Class Value 的東西, 到底是啥?
就是它們與傳統(tǒng)類型的變值沒啥區(qū)別,
可以 存到一個變量中,
可以 存到table中,
可以 作為實參傳遞給其它函數,
可以 作為其它函數的返回值.

它們還具有特定的詞法域(Lexical Scoping), 也就是說, 一個函數可以嵌套在另一個函數中, 內部的函數可以訪問外部函數中的變量.
如下面的例子:

復制代碼 代碼如下:

function test(x)
    return function (value)
        return value * x
    end
end

func = test(10)

print( func(11) )


在test()中,嵌套了一個匿名函數作為返回值, 而在這個匿名函數中 可以訪問外部的 value 變量
再看另一個例子
復制代碼 代碼如下:

function newCounter()
        local i = 0
        func = function()
                i = i + 1
                return i
        end

        return func
end

c = newCounter()
print(c())
print(c())

c1 = newCounter()
print(c1())
print(c1())


代碼中, 函數 func 里訪問了一個 "非局部的變量" i, 用于保存一個計數器
初步看,由于創(chuàng)建變量i的函數 newCounter 已經返回, 所以每次調用 func 時, 應該是超過了作用范圍

其實不然, lua 會以 closure 的概念來處理這種情況.
一個 closure 就是一個函數加上該函數所需訪問的所有"非局部的變量"

所以上例中 c1, c2 是同個函數所創(chuàng)建的兩個不同的 closure, 它們各自擁有局部變量i的獨立實例.

從技術上來講, lua中只有 closure, 而不存在"函數". 因為"函數"本身就是一種特殊的 closure.

后記,C++的類對象不也可以達到類似的效果?

相關文章

  • Lua中的閉合函數、非全局函數與函數的尾調用詳解

    Lua中的閉合函數、非全局函數與函數的尾調用詳解

    這篇文章主要介紹了Lua中的閉合函數、非全局函數與函數的尾調用詳解,本文對這2種函數和尾調用做了深入研究,需要的朋友可以參考下
    2014-09-09
  • Lua教程(七):數據結構詳解

    Lua教程(七):數據結構詳解

    這篇文章主要介紹了Lua教程(七):數據結構詳解,本文講解了數組、二維數組、鏈表、隊列與雙向隊列、 集合和包(Bag)、StringBuilder等內容,需要的朋友可以參考下
    2015-04-04
  • Lua獲取文件長度和判斷文件是否存在函數分享

    Lua獲取文件長度和判斷文件是否存在函數分享

    這篇文章主要介紹了Lua獲取文件長度和判斷文件是否存在函數分享,需要的朋友可以參考下
    2015-04-04
  • 實現Lua中數據類型的源碼分享

    實現Lua中數據類型的源碼分享

    在Lua中有8種基礎類型,像其他動態(tài)語言一樣,在語言中沒有類型定義的語法,每個值都攜帶了它自身的類型信息。下面我們就來嘗試通過Lua 5.2.1的源碼來看類型的實現
    2015-04-04
  • Lua性能優(yōu)化技巧(六):最后的提示

    Lua性能優(yōu)化技巧(六):最后的提示

    這篇文章主要介紹了Lua性能優(yōu)化技巧(六):最后的提示,本文是系列文章的最后一篇,其它文章請參考本文的相關文章,需要的朋友可以參考下
    2015-04-04
  • Lua返回一個Closures函數實例

    Lua返回一個Closures函數實例

    這篇文章主要介紹了Lua返回一個Closures函數實例,本文直接給出代碼實例,需要的朋友可以參考下
    2015-04-04
  • Lua極簡入門指南(一):函數篇

    Lua極簡入門指南(一):函數篇

    這篇文章主要介紹了Lua極簡入門指南(一):函數篇,本文講解了函數的定義、函數多值返回、變長參數、閉包(closures)等內容,需要的朋友可以參考下
    2014-10-10
  • lua+love2d制作的2048游戲

    lua+love2d制作的2048游戲

    前面給大家分享的是一個超級簡單版的使用lua實現的2048小游戲的代碼,今天我們加上love2d游戲引擎,制作PC版的2048游戲。小伙伴們仔細讀讀本文吧。
    2015-03-03
  • Lua中使用模塊的一些基礎知識

    Lua中使用模塊的一些基礎知識

    這篇文章主要介紹了Lua中使用模塊的一些基礎知識,說明基本上都融入注釋之中,需要的朋友可以參考下
    2015-07-07
  • Lua模擬面向對象示例分享

    Lua模擬面向對象示例分享

    本文這里主要給大家分享的是一則使用Lua模擬面向對象的方法的示例代碼,大家學習下思路,希望對大家能夠有所幫助。
    2015-03-03

最新評論

定安县| 景德镇市| 青神县| 西丰县| 阿拉善右旗| 莱西市| 顺义区| 潞城市| 洪泽县| 辽源市| 蓬安县| 阳西县| 缙云县| 农安县| 页游| 麻江县| 长岛县| 科技| 墨江| 九台市| 安化县| 江北区| 黔江区| 沧州市| 信宜市| 巴彦淖尔市| 平南县| 皋兰县| 蓝田县| 临泽县| 垦利县| 平南县| 故城县| 河源市| 张家口市| 成都市| 定边县| 铁力市| 平潭县| 阳东县| 鄯善县|