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

Lua的函數(shù)環(huán)境、包實(shí)例講解

 更新時(shí)間:2014年09月28日 08:56:27   投稿:junjie  
這篇文章主要介紹了Lua的函數(shù)環(huán)境、包實(shí)例講解,本文分別對(duì)函數(shù)環(huán)境、包的定義、實(shí)現(xiàn)方式、使用方式做了分解,需要的朋友可以參考下

復(fù)制代碼 代碼如下:

function foo()
   print(g or "No g defined!")
end
foo()
setfenv(foo, { g = 100, print = print }) --設(shè)置foo的環(huán)境為表{ g=100, ...}
foo()
print(g or "No g defined!")
--No g defined!
--100
--No g defined!

定義:函數(shù)環(huán)境就是函數(shù)在執(zhí)行時(shí)所見的全局變量的集合,以一個(gè)表來(lái)承載。

說(shuō)明:每個(gè)函數(shù)都可以有自己的環(huán)境,可以通過setfenv來(lái)顯示的指定一個(gè)函數(shù)的環(huán)境。如果不顯示的指定,函數(shù)的環(huán)境缺省為定義該函數(shù)的函數(shù)的環(huán)境。在前面的代碼中,函數(shù)foo的缺省環(huán)境里沒有定義變量g,因此第一次執(zhí)行foo, g為nil,表達(dá)式g or "No g defined!"的值就是"No g defined!"。隨后,foo被指定了一個(gè)環(huán)境 { g = 100, print = print }。這個(gè)環(huán)境定義了(全局)變量g,以及打印函數(shù)print,因此第二次執(zhí)行foo,g的值就是100。但是在定義函數(shù)foo的函數(shù)的環(huán)境下,g仍然是一個(gè)未定義的變量。

應(yīng)用:函數(shù)環(huán)境的作用很多,利用它可以實(shí)現(xiàn)函數(shù)執(zhí)行的“安全沙箱”;另外Lua的包的實(shí)現(xiàn)也依賴它。

復(fù)制代碼 代碼如下:

--mypack.lua:
module(..., package.seeall) --定義包
ver = "0.1 alpha"
function aFunInMyPack()
    print("Hello!")
end
_G.aFuncFromMyPack = aFunInMyPack

復(fù)制代碼 代碼如下:

--testP.lua:
pack = require "mypack" --導(dǎo)入包
print(ver or "No ver defined!")
print(pack.ver)
print(aFunInMyPack or "No aFunInMyPack defined!")
pack.aFunInMyPack()
print(aFuncFromMyPack or "No aFuncFromMyPack defined!")
aFuncFromMyPack()

復(fù)制代碼 代碼如下:

--執(zhí)行testP.lua結(jié)果
No ver defined!
0.1 alpha
No aFunInMyPack defined!
Hello!
function: 0068CB50
Hello!

定義:包是一種組織代碼的方式。

實(shí)現(xiàn)方式:一般在一個(gè)Lua文件內(nèi)以module函數(shù)開始定義一個(gè)包。module同時(shí)定義了一個(gè)新的包的函數(shù)環(huán)境,以使在此包中定義的全局變量都在這個(gè)環(huán)境中,而非使用包的函數(shù)的環(huán)境中。理解這一點(diǎn)非常關(guān)鍵。以前面的代碼為例, “module(..., package.seeall)”的意思是定義一個(gè)包,包的名字與定義包的文件的名字相同(除去文件名后綴,在前面的代碼中,就是“mypack”),并且在包的函數(shù)環(huán)境里可以訪問使用包的函數(shù)環(huán)境(比如,包的實(shí)現(xiàn)使用了print,這個(gè)變量沒有在包里定義,而是定義在使用包的外部環(huán)境中)。

使用方式:一般用require函數(shù)來(lái)導(dǎo)入一個(gè)包,要導(dǎo)入的包必須被置于包路徑(packagepath)上。包路徑可以通過package.path或者環(huán)境變量來(lái)設(shè)定。一般來(lái)說(shuō),當(dāng)前工作路徑總是在包路徑中。

相關(guān)文章

  • Lua極簡(jiǎn)入門指南(六):模塊

    Lua極簡(jiǎn)入門指南(六):模塊

    這篇文章主要介紹了Lua極簡(jiǎn)入門指南(六):模塊,本文講解了require函數(shù)、編寫模塊、查找模塊等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • lua中操作json數(shù)據(jù)的方法

    lua中操作json數(shù)據(jù)的方法

    這篇文章主要介紹了lua中操作json數(shù)據(jù)的方法,本文講解使用cjson包操作JSON數(shù)據(jù),并給出了操作實(shí)例,需要的朋友可以參考下
    2015-04-04
  • Lua之字符串格式化例子和常用格式化參數(shù)介紹

    Lua之字符串格式化例子和常用格式化參數(shù)介紹

    這篇文章主要介紹了Lua之字符串格式化例子和常用格式化參數(shù)介紹,本文著重講解了格式化參數(shù)的作用,需要的朋友可以參考下
    2015-04-04
  • Lua中table的幾種構(gòu)造方式詳解

    Lua中table的幾種構(gòu)造方式詳解

    這篇文章主要介紹了Lua中table的幾種構(gòu)造方式詳解,本文介紹了Lua調(diào)試工具LuaEditor、什么是table、創(chuàng)建一個(gè)table、初始化一個(gè)table等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • Lua的協(xié)程(coroutine)簡(jiǎn)介

    Lua的協(xié)程(coroutine)簡(jiǎn)介

    這篇文章主要介紹了Lua的協(xié)程(coroutine)簡(jiǎn)介,本文講解了coroutine的創(chuàng)建、協(xié)程的三種狀態(tài)和yield函數(shù)的配合使用等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • 詳解Lua中的變量相關(guān)知識(shí)點(diǎn)

    詳解Lua中的變量相關(guān)知識(shí)點(diǎn)

    這篇文章主要介紹了Lua中的變量相關(guān)知識(shí)點(diǎn),是Lua入門中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • Lua基本語(yǔ)法

    Lua基本語(yǔ)法

    Lua是相當(dāng)簡(jiǎn)單易學(xué),本篇文章來(lái)給大家稍微講一下Lua的語(yǔ)法,不會(huì)長(zhǎng)篇累牘得把Lua的所有語(yǔ)法都講一遍,這里通過以下幾點(diǎn)來(lái)講Lua語(yǔ)言的基礎(chǔ)語(yǔ)法。
    2015-05-05
  • Lua中的捕獲機(jī)制和轉(zhuǎn)換技巧介紹

    Lua中的捕獲機(jī)制和轉(zhuǎn)換技巧介紹

    這篇文章主要介紹了Lua中的捕獲機(jī)制和轉(zhuǎn)換技巧介紹,捕獲是這樣一種機(jī)制:可以使用模式串的一部分匹配目標(biāo)串的一部分,將你想捕獲的模式用圓括號(hào)括起來(lái),就指定了一個(gè)捕獲,需要的朋友可以參考下
    2014-11-11
  • Lua面向?qū)ο笾惡屠^承

    Lua面向?qū)ο笾惡屠^承

    這篇文章主要介紹了Lua面向?qū)ο笾惡屠^承,本文講解了Lua面向?qū)ο笞罨镜闹R(shí)類和繼承,需要的朋友可以參考下
    2014-09-09
  • Lua協(xié)同程序coroutine的簡(jiǎn)介及優(yōu)缺點(diǎn)

    Lua協(xié)同程序coroutine的簡(jiǎn)介及優(yōu)缺點(diǎn)

    今天小編就為大家分享一篇關(guān)于Lua協(xié)同程序coroutine的簡(jiǎn)介及優(yōu)缺點(diǎn),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10

最新評(píng)論

玉龙| 嘉义市| 龙里县| 姜堰市| 神农架林区| 大兴区| 邮箱| 巩留县| 准格尔旗| 额尔古纳市| 香格里拉县| 佛学| 教育| 宜兰县| 绥德县| 长顺县| 扶绥县| 光泽县| 尚志市| 响水县| 定兴县| 兴义市| 邓州市| 若羌县| 扎囊县| 江陵县| 馆陶县| 宜宾县| 溧阳市| 定安县| 临西县| 阜阳市| 石柱| 濮阳县| 普兰县| 曲靖市| 巴里| 宁津县| 南木林县| 涟水县| 金溪县|