lua腳本引擎用法總結(jié)(1)
?
???? 前段時(shí)間自己弄了個(gè)小的開(kāi)發(fā)平臺(tái),其實(shí)就是一堆類庫(kù)封裝了一下呵,畢竟自己用,方便就好。后來(lái)覺(jué)得不夠靈活,就把lua引進(jìn)來(lái)了。選的平臺(tái)是luaplus,最新版本的那個(gè)。感覺(jué)比較方便,隨手發(fā)出來(lái)大家一起研究哈:)
???? 現(xiàn)在總結(jié)了一下它的用法:
???? 1、當(dāng)配置文件用,拿來(lái)保存會(huì)根據(jù)環(huán)境變化的初值、常量。
?????這種用法應(yīng)該是最沒(méi)難度,也是最方便的了,因?yàn)榕c常拿來(lái)當(dāng)配置文件的,像ini和xml文件,都不能實(shí)現(xiàn)這樣的功能
???? m_sigDebug = true
???? if (m_sigDebug == true) then
??????? value = "調(diào)試中的值"
???? else
??????? vlaue = "發(fā)行版的值"
???? end
???? 我把它用的一個(gè)接口系統(tǒng)中,在調(diào)試時(shí)返回的目錄是本地的,而運(yùn)行時(shí)把debug一關(guān),嘿,俺是懶人嘛。其實(shí)也可以有其他的高級(jí)應(yīng)用,luaplus中有向 LuaStateOwner注冊(cè)變量的方法,所以這個(gè)配置文件還是可以很靈活滴,甚至可以將IP地址和CPU號(hào)甚至硬件序號(hào)發(fā)進(jìn)來(lái),然后實(shí)現(xiàn)注冊(cè)控制呵。 如果沒(méi)注冊(cè),不提供常量,跑不下去了吧,哈??


Re: lua腳本引擎用法總結(jié)(2)
?
2、拿來(lái)維護(hù)一些易變的算法。
我有一個(gè)工具,用VC作了界面,所有的事件、調(diào)用全發(fā)到LuaStateOwner中了,分別調(diào)用不同的.lua文件。于是實(shí)現(xiàn)了修改算法,不必改代碼,不用重編譯。
當(dāng)然,這樣伴隨著一個(gè)問(wèn)題,.lua不要直接發(fā)出去,編譯一下再發(fā)。還有,就是我在程序中對(duì).lua的md5驗(yàn)證了一下,這樣可以保證別人不要修改俺的代碼,因?yàn)槭呛蛿?shù)據(jù)庫(kù)相關(guān)的嘛,如果別人可以改代碼,那不是把數(shù)據(jù)庫(kù)給賣了嘛:)



Re: lua腳本引擎用法總結(jié)(3)
?
3、為L(zhǎng)uaStateOwner實(shí)現(xiàn)開(kāi)放的功能庫(kù)
實(shí)現(xiàn)了配置、實(shí)現(xiàn)了邏輯算法,但還是覺(jué)得不方便,因?yàn)樵诘?種應(yīng)用方法中,所有的數(shù)據(jù)要由VC向LuaStateOwner注冊(cè),也就是說(shuō)數(shù)據(jù)結(jié)構(gòu)發(fā)生變化時(shí)代碼就沒(méi)用了。這樣就不能實(shí)現(xiàn)個(gè)性化或叫二次開(kāi)發(fā)。
要實(shí)現(xiàn)到這一步,有兩種方案:
a.增強(qiáng)lua的數(shù)據(jù)庫(kù)處理能力,開(kāi)放數(shù)據(jù)庫(kù)給lua直接訪問(wèn),我自己抓數(shù)據(jù)過(guò)來(lái)處理,這樣就沒(méi)問(wèn)題了呵。
b.為L(zhǎng)uaStateOwner擴(kuò)展功能庫(kù),lua中增加一個(gè)函數(shù),向VC要數(shù)據(jù),我要哪個(gè)數(shù)據(jù)源、哪個(gè)表的哪個(gè)SQL結(jié)果,你給我發(fā)過(guò)來(lái),創(chuàng)建成table×××。
我選擇了b。因?yàn)橄馻計(jì)劃呵,lua在程序中的地位太超然了,也就是給他的權(quán)限太強(qiáng)了。這樣容易失控。舉例哈,建立數(shù)據(jù)庫(kù)連接時(shí)要暴露太多信息。有人說(shuō)我 用VC把usr/pwd注冊(cè)到LuaStateOwner中去給它用,保密了。那我再舉例哈,每個(gè)表都要用lua創(chuàng)建,我試過(guò)一個(gè)20萬(wàn)記錄的表,那速 度,汗。不過(guò)用VC創(chuàng)建這些表感覺(jué)快好多呵,不知是不是錯(cuò)覺(jué)呵。
好的想法就要實(shí)施哈,我現(xiàn)在想把這種應(yīng)用封裝一下,弄個(gè)SERVO(伺服)系統(tǒng)。大體想法是將數(shù)據(jù)源、常量、網(wǎng)絡(luò)信息、功能類庫(kù)通通作為受控的SERVO 向LUA提供。LUA專門負(fù)責(zé)邏輯、算法(當(dāng)然,有些算法要求比較BT的像MD5可以用SERVO封一下再給LUA)的實(shí)現(xiàn)和業(yè)務(wù)重組,而SERVO專心 負(fù)責(zé)數(shù)據(jù)源的權(quán)限控制、常量的演變以及類庫(kù)接口在訪問(wèn)中的控制這些應(yīng)用權(quán)限上的實(shí)現(xiàn)。
好了,寫(xiě)到這兒,我的QQ:25723030,MSN是myao@hotmail.com,歡迎一起討論。