欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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 }) --設(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ù)都可以有自己的環(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)境中。理解這一點非常關(guān)鍵。以前面的代碼為例, “module(..., package.seeall)”的意思是定義一個包,包的名字與定義包的文件的名字相同(除去文件名后綴,在前面的代碼中,就是“mypack”),并且在包的函數(shù)環(huán)境里可以訪問使用包的函數(shù)環(huán)境(比如,包的實現(xiàn)使用了print,這個變量沒有在包里定義,而是定義在使用包的外部環(huán)境中)。

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

相關(guān)文章

  • Lua中的閉包小結(jié)

    Lua中的閉包小結(jié)

    這篇文章主要介紹了Lua中的閉包小結(jié),本文對閉包的概念做了講解,同時給出閉包代碼示例,需要的朋友可以參考下
    2014-09-09
  • lua文件操作詳解

    lua文件操作詳解

    Lua中關(guān)于文件處理操作是本文要介紹的內(nèi)容,主要是來了解并學習lua中文件的相關(guān)操作,具體內(nèi)容的實現(xiàn)來看本文詳解。
    2016-03-03
  • Lua進階教程之閉包函數(shù)、元表實例介紹

    Lua進階教程之閉包函數(shù)、元表實例介紹

    這篇文章主要介紹了Lua進階教程之閉包函數(shù)、元表實例介紹,本文詳細講解了Lua的閉包函數(shù)和元表,并同時和C++做了比較,需要的朋友可以參考下
    2014-09-09
  • Lua中獲取table長度的方法

    Lua中獲取table長度的方法

    這篇文章主要介紹了Lua中獲取table長度的方法,本文用多個實例講解多種情況下獲取Table長度的方法,需要的朋友可以參考下
    2015-04-04
  • Lua性能優(yōu)化技巧(一):前言

    Lua性能優(yōu)化技巧(一):前言

    這篇文章主要介紹了Lua性能優(yōu)化技巧(一):前言,本文講解了2條優(yōu)化原則,本文是系列文章的第一篇,需要的朋友可以參考下
    2015-04-04
  • Lua中的table淺析

    Lua中的table淺析

    這篇文章主要介紹了Lua中的table淺析,本文講解了table的構(gòu)造方法、內(nèi)置函數(shù)unpack等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • Lua腳本語言簡明入門教程

    Lua腳本語言簡明入門教程

    這篇文章主要介紹了Lua腳本語言簡明入門教程,本文簡潔干練,可以讓一個有編程基礎(chǔ)的快速的學會Lua腳本語言,需要的朋友可以參考下
    2014-09-09
  • Lua模塊與包學習筆記

    Lua模塊與包學習筆記

    這篇文章主要介紹了Lua模塊與包學習筆記,本文講解了加載模塊、加載機制等內(nèi)容,需要的朋友可以參考下
    2014-12-12
  • Lua中的閉包學習筆記

    Lua中的閉包學習筆記

    這篇文章主要介紹了Lua中的閉包學習筆記,閉包是可以包含自由(未綁定到特定對象)變量的代碼塊;這些變量不是在這個代碼塊內(nèi)或者任何全局上下文中定義的,而是在定義代碼塊的環(huán)境中定義(局部變量),需要的朋友可以參考下
    2014-12-12
  • Lua中實現(xiàn)sleep函數(shù)功能的4種方法

    Lua中實現(xiàn)sleep函數(shù)功能的4種方法

    這篇文章主要介紹了Lua中實現(xiàn)sleep函數(shù)功能的4種方法,本文講解了在一個死循環(huán)中設(shè)置一個跳出條件方法、調(diào)用系統(tǒng)的sleep函數(shù)法、Windows下ping命令法、socket庫中select函數(shù)法4種方法,需要的朋友可以參考下
    2015-04-04

最新評論