成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一個(gè)關(guān)于Lua腳本管理器詳解

移動(dòng)開發(fā) iOS
lua里沒有工程的概念,所以文件是最小單位,這樣一來腳本文件數(shù)量的增長(zhǎng)會(huì)帶來一個(gè)問題,名字污染。lua里定義的變量默認(rèn)是全局的,只有使用了local定義的才是本地的

Lua腳本管理器詳解是本文要介紹的內(nèi)容,這不是一個(gè)文本編輯器或者ide之類的東東,實(shí)際上它只是一個(gè)dll,lua是膠水語言,這個(gè)管理器的目的是為了讓C/C++更好的支持lua

通常項(xiàng)目里管理腳本的方法都是分開文件存放,lua里沒有工程的概念,所以文件是最小單位,這樣一來腳本文件數(shù)量的增長(zhǎng)會(huì)帶來一個(gè)問題,名字污染。lua里定義的變量默認(rèn)是全局的,只有使用了local定義的才是本地的,這樣一來你在腳本a里定義的函數(shù)可能和在腳本b里定義的函數(shù)同名,而這完全不會(huì)帶來任何錯(cuò)誤或警告,因?yàn)樵趌ua里函數(shù)就是一個(gè)值,你可以隨時(shí)修改。

導(dǎo)出一個(gè)全局函數(shù)Include,它能把其它腳本包含進(jìn)來,就像C里的#include一樣,實(shí)際上它沒有包含任何內(nèi)容進(jìn)來,只是建立了一個(gè)腳本間的關(guān)系網(wǎng),每一個(gè)腳本是一個(gè)頂點(diǎn),Include建立到達(dá)關(guān)系。每個(gè)腳本是隔離開的,即不同的腳本中的變量是可以同名的,但是是不同的變量,這個(gè)通過函數(shù)環(huán)境實(shí)現(xiàn)。

關(guān)鍵的東西是,優(yōu)先關(guān)系,lua里雖然沒有定義變量的語句,但是卻有index和newindex事件,對(duì)一組值 取值的時(shí)候 t[k] 就觸發(fā)index事件,對(duì)一組值 設(shè)定值的時(shí)候 t[k] = v 就觸發(fā)newindex事件。后者就相當(dāng)于是定義變量啦,即第一次使用。

index優(yōu)先關(guān)系是:local > script > register-table > global,register-table是從C里導(dǎo)出的一些東西的總和,總的原則是越具體的東西越先考慮。首先是找local變量,找不到 就找本環(huán)境中的變量,找不到 就找Include關(guān)系能到達(dá)的其它腳本中的變量,找不到 就找register-table中的變量,找不到 就找全局變量。

newindex優(yōu)先關(guān)系是:local > script(no include) > global,k是local就設(shè)置k = v,否則 如果t是table 先rawget(t, k) 找到了就設(shè)置值,否則 找global,global中有值就是global 否則就設(shè)置script。這里有些混亂,換言之,就是script中和global中不會(huì)同時(shí)有某個(gè)值,global中的值還是會(huì)影響到script中的值,也就是說不要定義太多的global值,比如你在腳本中寫:

  1. function print()  
  2. end 

它會(huì)認(rèn)為是global的print,而把它重定義掉。

而實(shí)際上你在腳本里是無法定義新的global值的,你定義一個(gè)global中沒有的值,它會(huì)轉(zhuǎn)為script環(huán)境中的值。除了系統(tǒng)的一些函數(shù),連導(dǎo)出的函數(shù)都不是直接放在global中的,所以一般無法定義新的global值。

好了,給了你限制還要給你靈活性,global中有一個(gè)Global函數(shù),它能定義global值,接受1到2個(gè)參數(shù),第一個(gè)是名字,第二個(gè)是初值。你如果對(duì)已有g(shù)lobal值再調(diào)用它,會(huì)給一個(gè)錯(cuò)誤信息,說你重定義了某個(gè)值。你可以在一個(gè)腳本中這樣寫:

  1. Global("Foo")  
  2. function Foo()  
  3. end 

這樣這個(gè)Foo就不是在這個(gè)腳本中的函數(shù)了,在其它腳本中不用Include也能訪問。

此外,還在增加其它功能,比如lua序列化,將來還會(huì)增加lua的userdata和lua調(diào)試等。寫這個(gè)的過程還是學(xué)到了很多東西,發(fā)現(xiàn)學(xué)lua不用找任何資料,直接上官網(wǎng)查手冊(cè)就行了,手冊(cè)就只有一頁,很方便。

小結(jié):解析一個(gè)關(guān)于Lua腳本管理器的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對(duì)你有所幫助!

責(zé)任編輯:zhaolei 來源: 網(wǎng)絡(luò)轉(zhuǎn)載
相關(guān)推薦

2020-04-15 19:31:59

Bitwarden開源密碼管理器

2022-08-09 18:00:26

開源密碼管理器Padloc

2014-04-23 11:11:27

Linux下載管理器uGet

2022-07-14 16:18:32

massCode開源

2011-08-25 16:20:33

Lua腳本變量

2020-08-10 08:26:26

Windows 10Windows微軟

2023-03-27 10:40:09

2021-11-15 14:42:20

Motrix下載管理器開源

2018-05-03 12:35:05

Linux命令Pet

2011-08-31 16:39:06

Lua調(diào)試器

2011-08-24 15:28:02

Lua編譯器解釋器

2021-03-05 14:02:51

LinuxWindows管理器

2009-07-07 16:43:04

2009-12-24 16:01:17

redhat Linu

2022-05-20 10:56:40

HydraPaper壁紙管理器Linux

2012-10-11 10:45:05

Windows Ser

2018-05-08 08:35:34

LinuxDocker 容器管理器

2011-08-24 14:33:14

LUA開發(fā)環(huán)境Decoda

2011-08-25 17:25:55

LUADelphi

2011-08-25 14:03:32

UbuntuLUA安裝
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产一区在线免费 | 亚洲精品成人av久久 | 国产91久久久久 | 成人免费视频一区 | 国产一区二区三区www | 亚洲精品成人 | 日韩av一区二区在线 | 日韩在线一区二区三区 | 精品欧美乱码久久久久久 | 中文字幕精品一区久久久久 | www.97国产 | 国产日韩欧美精品一区二区 | 黄色毛片在线看 | 亚洲精品日韩一区二区电影 | 国产精品自拍视频 | 红色av社区 | 久久久国产一区二区三区四区小说 | 久久久久国产一区二区 | 中文字幕第九页 | 中文字幕精品一区二区三区精品 | 乱码av午夜噜噜噜噜动漫 | 国产成人免费在线观看 | 在线一区视频 | 久久精品小视频 | 成人久久视频 | 亚洲视频在线免费观看 | 精品欧美一区二区三区免费观看 | 91久久看片 | 国内精品久久久久久久影视简单 | 综合久久99 | 欧美精品 在线观看 | 亚洲在线一区二区 | 欧美一区二区在线播放 | 精品在线一区二区 | 国产精品久久久久久亚洲调教 | 久久久青草婷婷精品综合日韩 | 欧美一级在线观看 | 亚洲国产欧美一区 | 亚洲精品粉嫩美女一区 | 中文在线一区二区 | 午夜亚洲|