婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 解析Lua中的全局環(huán)境、包、模塊組織結(jié)構(gòu)

解析Lua中的全局環(huán)境、包、模塊組織結(jié)構(gòu)

熱門標(biāo)簽:衡水外呼線路解決 杞縣地圖標(biāo)注app 昆明電話外呼系統(tǒng)好么 免費(fèi)門店地圖標(biāo)注注冊入駐 陜西便宜電銷機(jī)器人軟件 外呼系統(tǒng)一天耗費(fèi)多少流量 艾比利外呼系統(tǒng) 海口智能語音電銷機(jī)器人好用嗎 電話機(jī)器人每天搜索多少次

模塊就是一個(gè)程序庫,而包是一系列模塊。Lua中可以通過require來加載模塊,然后得到一個(gè)全局變量表示一個(gè)table。Lua將其所有的全局變量保存在一個(gè)被稱為“環(huán)境”的常規(guī)table中。本文首先介紹環(huán)境的一些實(shí)用技術(shù),然后介紹如何引用模塊及編寫模塊的基本方法。

1. 環(huán)境
Lua將環(huán)境table保存在一個(gè)全局變量_G中,可以對其訪問和設(shè)置。有時(shí)我們想操作一個(gè)全局變量,而它的名稱卻存儲在另一個(gè)變量中,或者需要通過運(yùn)行時(shí)的計(jì)算才能得到,可以通過value = _G[varname]來獲得動(dòng)態(tài)名字的全局變量。

關(guān)于“環(huán)境”的一大問題是它是全局的,任何對它的修改都會影響程序的所有部分。Lua 5允許每個(gè)函數(shù)擁有一個(gè)子集的環(huán)境來查找全局變量,可以通過setfenv來改變一個(gè)函數(shù)的環(huán)境,第一個(gè)參數(shù)若是1則表示當(dāng)前函數(shù),2則表示調(diào)用當(dāng)前函數(shù)的函數(shù)(依次類推),第二個(gè)參數(shù)是一個(gè)新的環(huán)境table。

a = 1
setfenv(1, {})
print(a) -- 會報(bào)錯(cuò),print是一個(gè)nil。這是因?yàn)橐坏└淖儹h(huán)境,所有的全局訪問都會使用新的table

為了避免上述問題,可以使用setfenv(1, {_G = _G})將原來的環(huán)境保存起來,然后用_G.print來引用。另一種組裝新環(huán)境的方法是使用繼承,下面的代碼新環(huán)境從源環(huán)境中繼承了print和a,任何賦值都發(fā)生在新的table中。

a = 1
local newgt = {}
setmetatable(newgt, {__index = _G})
setfenv(1, newgt)
print(a)

2. 模塊與包
2.1 調(diào)用模塊

要調(diào)用模塊mod中的foo方法,可以用require函數(shù)來加載,如:

require "mod"
mod.foo()
-- 或者
local m = require "mod"
m.foo()

require函數(shù)的行為: (關(guān)于require使用的路徑查找策略不贅述)
在package.loaded這個(gè)table中檢查模塊是否已加載
=> 已加載,就返回相應(yīng)的值(可見一個(gè)模塊只會加載一次)
=> 未加載,就試著在package.preload中查詢傳入的模塊名
===> 找到一個(gè)函數(shù),就以該函數(shù)作為模塊的加載器
===> 找不到,則嘗試從Lua文件或C程序庫中加載模塊
=====> 找到Lua文件,通過loadfile來加載文件
=====> 找到C程序庫,通過loadlib來加載文件

2.2 使用環(huán)境

下面的代碼說明了如何用環(huán)境來創(chuàng)建一個(gè)復(fù)數(shù)(complex)模塊:

-- 模塊設(shè)置
local modname = "complex"
local M = {}
_G[modname] = M
package.loaded[modname] = M

-- 聲明模塊從外界所需的所有東西
local _G = _G -- 保留舊環(huán)境的引用,使用時(shí)需要像_G.print這樣用
local io = io

-- 運(yùn)行這句之后環(huán)境就變了
setfenv(1, M)

function new(r, i) return {r=r, i=i} end

function add(c1, c2)
  return new(c1.r + c2.r, c1.i + c2.i)
end

這樣聲明函數(shù)add時(shí),就成為了complex.add,調(diào)用同一模塊的其他函數(shù)也不需要加前綴。

2.3 module函數(shù)

Lua 5.1提供了一個(gè)新函數(shù)module,囊括了上面一系列定義環(huán)境的功能。在開始編寫一個(gè)模塊時(shí),可以直接用module("modname", package.seeall)來取代前面的設(shè)置代碼。在一個(gè)模塊文件開頭有這句調(diào)用后,后續(xù)所有代碼都不需要限定模塊名和外部名字,同樣也不需要返回模塊table了。

2.4 子模塊與包

Lua支持具有層級的模塊名,用一個(gè)點(diǎn)來分隔名稱中的層級。例如一個(gè)模塊名為mod.sub,就是mod的一個(gè)子模塊。一個(gè)包(package)就是一個(gè)完整的模塊樹,它是Lua中發(fā)型的單位。注意,當(dāng)搜索一個(gè)子模塊文件時(shí),require會把點(diǎn)號當(dāng)做目錄分隔符來搜索,也就是說調(diào)用require "a.b"會嘗試打開./a/b.lua,/usr/local/lua/a/b.lua,/usr/local/lua/a/b/init.lua。通過這種加載策略,可以將包的所有模塊組織到一個(gè)目錄中。

2.5 以自定義方式加載 lua 模塊
從 Lua 5.1 以后,Lua 有了標(biāo)準(zhǔn)的模塊管理庫。所以所有的模塊加載都是通過 require 來完成。 require 的設(shè)計(jì)是頗具擴(kuò)展性的,它會從若干個(gè)定義好的 loader 中逐個(gè)嘗試加載新的模塊。系統(tǒng)庫中提供了四個(gè) loader ,分別實(shí)現(xiàn)已加載模塊,Lua 模塊,和 C 擴(kuò)展模塊(用了兩個(gè) loader 來實(shí)現(xiàn) C 擴(kuò)展模塊的加載)。這些 loader 以 CFunction 的形式放在 require 的環(huán)境中的一個(gè) table 里。

如果我們想改變 lua 模塊的加載形式,只需要替換或增加一個(gè)新的 loader 就可以了。

要做的只需要模仿 loadlib.c 中的 loader_Lua 函數(shù)做一個(gè)自己的實(shí)現(xiàn),比如在我們的項(xiàng)目中,就允許從自定義格式數(shù)據(jù)包中,加載一個(gè)被加密過的 Lua 代碼文件。然后寫幾行 C 代碼,獲得 require 的環(huán)境(使用 lua_getfenv ),然后取出其中 "loaders" 這個(gè) table ,把新的自定義 loader 插入到 index 2 的地方。

具體的代碼就不詳述了,仔細(xì)閱讀一下 ll_require 的實(shí)現(xiàn)(在 loadlib.c 中)就很容易明白。我們的整個(gè)工作從分析到實(shí)現(xiàn)沒有超過兩個(gè)小時(shí),這真是得益于 Lua 良好的設(shè)計(jì)啊 :D 甚至如果你想從一個(gè)網(wǎng)絡(luò)連接的數(shù)據(jù)流中加載 Lua 模塊,或是通過 http/ftp 協(xié)議下載,也是行的通的吧。

您可能感興趣的文章:
  • 解決nginx+lua搭建文件上傳下載服務(wù)問題
  • Lua在windows下的安裝及環(huán)境配置
  • 安裝Nginx+Lua開發(fā)環(huán)境
  • Mac平臺中編譯安裝Lua運(yùn)行環(huán)境及Hello Lua實(shí)例
  • Lua在各個(gè)操作系統(tǒng)中的開發(fā)環(huán)境配置教程
  • Lua的函數(shù)環(huán)境、包實(shí)例講解
  • linux系統(tǒng)安裝Nginx Lua環(huán)境
  • 如何使用Vim搭建Lua開發(fā)環(huán)境詳解

標(biāo)簽:南京 昌都 宿遷 營口 西寧 臨滄 泰安 海口

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《解析Lua中的全局環(huán)境、包、模塊組織結(jié)構(gòu)》,本文關(guān)鍵詞  解析,Lua,中的,全局,環(huán)境,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《解析Lua中的全局環(huán)境、包、模塊組織結(jié)構(gòu)》相關(guān)的同類信息!
  • 本頁收集關(guān)于解析Lua中的全局環(huán)境、包、模塊組織結(jié)構(gòu)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美久久一二三四区| 成人app软件下载大全免费| 精品无人区卡一卡二卡三乱码免费卡| 韩日av一区二区| 久久综合九色综合97婷婷女人 | 91久久精品一区二区三| 国产精品免费观看视频| 成人av在线播放网站| 国产精品无码永久免费888| 成人视屏免费看| 1000精品久久久久久久久| 一本大道久久a久久精二百| 欧美激情在线一区二区| 91福利视频网站| 另类中文字幕网| 国产精品福利一区| 欧美亚洲国产一区二区三区va| 日韩精品一二三四| 久久综合中文字幕| 一本久久精品一区二区| 日韩精品电影在线| 欧美极品aⅴ影院| 欧美日韩在线免费视频| 九九九精品视频| 亚洲天堂福利av| 欧美图片一区二区三区| 久久国产尿小便嘘嘘| 国产精品国产三级国产有无不卡 | 欧美成人伊人久久综合网| 五月婷婷久久丁香| 亚洲国产精品传媒在线观看| 欧美日韩亚洲综合| 久久精品国内一区二区三区| 国产精品久久久久久久久免费桃花 | 亚洲成a人v欧美综合天堂下载| 在线不卡a资源高清| 成人久久视频在线观看| 秋霞影院一区二区| 亚洲男人天堂一区| 国产偷国产偷亚洲高清人白洁| 欧美亚洲国产一区二区三区va| 国产剧情一区在线| 丝袜美腿亚洲色图| 亚洲精品亚洲人成人网| 久久综合色8888| 69堂国产成人免费视频| 91福利社在线观看| 一本久道久久综合中文字幕| 国产91对白在线观看九色| 奇米色777欧美一区二区| 亚洲综合在线第一页| 国产精品拍天天在线| 日韩免费在线观看| 欧美色爱综合网| 欧美色综合影院| av在线播放成人| 99精品国产视频| 不卡一二三区首页| 成人午夜激情影院| 国产一区二区电影| 日本一不卡视频| 精品国产一二三| 成人18精品视频| 日韩一区二区麻豆国产| 精品国一区二区三区| 国产欧美视频在线观看| 亚洲精品成人精品456| 日本最新不卡在线| 不卡视频在线看| 日韩av一区二区在线影视| www.日韩精品| 2023国产精华国产精品| 一区二区三区四区av| 狠狠色丁香久久婷婷综合_中| 91黄色免费版| 欧美极品少妇xxxxⅹ高跟鞋| 天天色天天爱天天射综合| 国产一区二区三区观看| 欧美日韩综合在线免费观看| 中文字幕免费在线观看视频一区| 亚洲人成网站在线| 精品免费一区二区三区| 国产精品福利在线播放| 国产成人精品网址| 久久午夜羞羞影院免费观看| 日本在线不卡视频| 一区二区三区中文在线| 处破女av一区二区| 国产欧美精品一区| 一区二区不卡在线视频 午夜欧美不卡在 | 成熟亚洲日本毛茸茸凸凹| 亚洲自拍偷拍网站| 久久精品亚洲国产奇米99| 欧美日韩精品专区| 91尤物视频在线观看| 日本vs亚洲vs韩国一区三区二区| 国产亚洲精品aa| 尤物av一区二区| 久久久久久久久久久久久夜| 色爱区综合激月婷婷| 国产精品91一区二区| 免费xxxx性欧美18vr| 91久久精品一区二区三区| 成人激情小说乱人伦| 久久99最新地址| 亚洲成av人片在线| 91在线观看污| www..com久久爱| 久久久久亚洲蜜桃| 免费观看91视频大全| 欧美三级三级三级爽爽爽| 精品国产一区二区三区四区四| 综合久久一区二区三区| 国产成人aaa| 久久久久久亚洲综合| 欧美怡红院视频| 日韩欧美国产三级| 99久久久久免费精品国产 | 中文字幕欧美日韩一区| 日韩免费电影一区| 婷婷六月综合网| 亚洲最新在线观看| 欧美日韩中文字幕精品| 国产成a人亚洲精品| 日韩成人一级大片| 色婷婷精品大视频在线蜜桃视频 | 免费国产亚洲视频| 欧美午夜片在线看| 日韩一区在线免费观看| 高清日韩电视剧大全免费| 香蕉加勒比综合久久 | 亚洲日本丝袜连裤袜办公室| 国产精品久久久久影院亚瑟| 久久婷婷久久一区二区三区| 91精品国产综合久久久久久久久久 | 国产精品麻豆欧美日韩ww| 欧美日本精品一区二区三区| 亚洲欧美在线aaa| 亚洲日本一区二区三区| 国产精品久久久久一区二区三区 | 欧美哺乳videos| 欧美喷水一区二区| 一区二区三区四区五区视频在线观看 | 一区二区在线看| 亚洲天堂av老司机| 欧美无砖砖区免费| 日产欧产美韩系列久久99| 久久不见久久见免费视频1| 麻豆一区二区99久久久久| 欧美一级搡bbbb搡bbbb| 极品瑜伽女神91| 久久久久久9999| 国产欧美日韩在线观看| 成人欧美一区二区三区黑人麻豆| 中文字幕一区二区三中文字幕| 亚洲精品中文在线观看| 伊人色综合久久天天人手人婷| 91丨九色丨国产丨porny| 国产成人亚洲综合a∨婷婷| 国产激情偷乱视频一区二区三区| 成人午夜激情在线| 91麻豆精品国产91久久久 | 91精品国产aⅴ一区二区| 欧美夫妻性生活| 久久久久久9999| 欧美熟乱第一页| 精品国产麻豆免费人成网站| 成人免费观看av| 7777精品伊人久久久大香线蕉的 | 国产日韩亚洲欧美综合| 亚洲自拍与偷拍| 国产aⅴ综合色| 亚洲午夜久久久久久久久电影网 | 欧美肥妇free| 2020国产成人综合网| 亚洲精品视频在线观看免费| 日韩视频一区二区三区在线播放| 国产做a爰片久久毛片| 欧美中文字幕不卡| 久久亚洲私人国产精品va媚药| 色婷婷综合久久久久中文| 日韩欧美在线观看一区二区三区| 亚洲免费色视频| 激情都市一区二区| 亚洲一区日韩精品中文字幕| 精品久久久久av影院| 色哟哟精品一区| 国产人妖乱国产精品人妖| 日韩欧美资源站| 欧美日韩国产高清一区二区三区 | 免费视频最近日韩| 成人黄色小视频| 理论电影国产精品| 一区二区三区欧美在线观看| 国产精品欧美一级免费| 国产在线麻豆精品观看| 国产主播一区二区三区| 久久国产日韩欧美精品| 久久99国产精品尤物| 91精品国产福利|