使用LUA開發WOW插件 ACE3庫的理解(一)

    玩WOW已經有半年了,蹭了半年電腦,在兄弟的帶領下把小戰士升級到了70,就放在那沒動了,呵呵。本身是學計算機的,不能荒廢了學業哈,所以就開始研究起LUA,想做個屬於自己的插件,雖說照着網上的教程可以寫出來個簡單的插件,可是自己硬是硬着頭皮啃了下ACE3庫,這幾天終於有點眉目了,慢慢來,打算每天寫一點,終有一天會把那玩意搞透的哈,呵呵。
    廢話少說,開始第一篇--《LibStub》
    按照源碼上的註釋,這是一個簡單的庫版本管理的工具(STUB不知怎麼翻譯)。事實上,它只是一個Table,然後將自己存儲在了_G(也就是全局環境中), 如果按照Table的定義呢,這個LibStub可以按照如下形式描寫:
    LibStub = {
                lib = {}
                minors = {}
              }
    緊接着,註冊自己(就是把自己添加到)_G中,用到代碼:_G[2] = LibStub 
    這個LibStub提供了兩個函數:NewLibrary(major, minor)和GetLibrary(major, silent),這兩個函數大家看名字就能明白是幹什麼用的。第一個函數呢就是根據你所給定的庫的版本號來在LibStub中增加一條記錄,例如:如果如此調用:
    LibStub:NewLibrary("A", "B")
    首先通過以下兩句來判斷這個庫有沒有新的版本(其中的SELF當然就是LibStub)
    local oldminor = self.minors["A"] --取出以字符串major爲索引保存在LibStub.minors中的版本號
    if oldminor and oldminor >= "B" then return nil end--判斷庫是否存在以及是否是新的版本存在
    庫的管理也就體現在以上兩段吧...     
    如果庫存在,也沒有比當前請求的庫版本要新的存在,則以主版本爲索引保存(下次可以再次通過版本號來獲得相同的庫。
    今天先寫到這明天再補充,第一回寫,累了。。。可能還是寫得不太明白,呵呵                                     
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章