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

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

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

復制代碼 代碼如下:

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

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

復制代碼 代碼如下:

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

復制代碼 代碼如下:

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

復制代碼 代碼如下:

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

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

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

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

相關文章

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

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

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

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

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

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

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

    Lua中table的幾種構造方式詳解

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

    Lua的協(xié)程(coroutine)簡介

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

    詳解Lua中的變量相關知識點

    這篇文章主要介紹了Lua中的變量相關知識點,是Lua入門中的基礎知識,需要的朋友可以參考下
    2015-05-05
  • Lua基本語法

    Lua基本語法

    Lua是相當簡單易學,本篇文章來給大家稍微講一下Lua的語法,不會長篇累牘得把Lua的所有語法都講一遍,這里通過以下幾點來講Lua語言的基礎語法。
    2015-05-05
  • Lua中的捕獲機制和轉(zhuǎn)換技巧介紹

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

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

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

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

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

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

最新評論

左贡县| 宣化县| 仁寿县| 凌云县| 肃北| 观塘区| 长寿区| 文山县| 平利县| 永靖县| 濉溪县| 潼关县| 朔州市| 泸州市| 墨玉县| 崇明县| 福贡县| 奇台县| 名山县| 绥芬河市| 新平| 武平县| 渭源县| 石棉县| 白水县| 富源县| 莲花县| 万载县| 桂东县| 宜都市| 山西省| 富锦市| 大荔县| 福州市| 玛纳斯县| 会宁县| 铜梁县| 正蓝旗| 林州市| 兴城市| 陆川县|