• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            的筆記

            隨時隨地編輯

            Metatables

            參考資料

            Referenced Values, Metatables, and Simple Inheritance>

            http://phrogz.net/lua/LearningLua_ValuesAndMetatables.html

            Metatable In Lua 淺嘗輒止
            http://www.cnblogs.com/simonw/archive/2007/01/17/622032.html

            扯淡

            metatable只是一個普通的table,當(dāng)你它他當(dāng)做metatable來用的時候,他就成了metatable:
               setmetatable( theFirstTable, theOtherTable )

            如果一個table有一個metatable,碰巧的是這個metatable有一寫特殊的關(guān)鍵字,則在使用這個table的時候,會發(fā)生一個寫有趣的事情:
             function gettable_event (table, key)
               local h
               if type(table) == "table" then
                 local v = rawget(table, key)
                 if v ~= nil then return v end
                 h = metatable(table).__index
                 if h == nil then return nil end
               else
                 h = metatable(table).__index
                 if h == nil then
                   error("...");
                 end
               end
               if type(h) == "function" then
                 return h(table, key)      -- call the handler
               else return h[key]          -- or repeat operation on it
            end

                也就是,你訪問表,其實最終訪問到表的metatable上去了。這些就是lua mirror a cplusplus class的基本原理。細節(jié)是復(fù)雜的,也很晦澀。


            Metatables

            15個重載方法(http://www.lua.org/manual/5.1/manual.html#2.8)

            We call the keys in a metatable events and the values metamethods. In the previous example, the event is "add" and the metamethod is the function that performs the addition.

            1. "add": the + operation.
            2. "sub": the - operation. Behavior similar to the "add" operation.
            3. "mul": the * operation. Behavior similar to the "add" operation.
            4. "div": the / operation. Behavior similar to the "add" operation.
            5. "mod": the % operation. Behavior similar to the "add" operation, with the operation o1 - floor(o1/o2)*o2 as the primitive operation.
            6. "pow": the ^ (exponentiation) operation. Behavior similar to the "add" operation, with the function pow (from the C math library) as the primitive operation."unm": the unary - operation.
            7. "concat": the .. (concatenation) operation.
            8. "len": the # operation.
            9. "eq": the == operation. The function getcomphandler defines how Lua chooses a metamethod for comparison operators. A metamethod only is selected when both
            10. objects being compared have the same type and the same metamethod for the selected operation.
            11. "lt": the < operation.
            12. "le": the <= operation.
            13. "index": The indexing access table[key].
            14. "newindex": The indexing assignment table[key] = value.
            15. "call": called when Lua calls a value.

            posted on 2011-07-02 20:49 的筆記 閱讀(293) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久精品亚洲日本波多野结衣| 久久亚洲国产中v天仙www| 久久亚洲电影| 日日噜噜夜夜狠狠久久丁香五月| 久久人妻少妇嫩草AV无码专区| 亚洲午夜久久久精品影院| 伊人久久亚洲综合影院| WWW婷婷AV久久久影片| 999久久久免费国产精品播放| 国产成人精品综合久久久| 狠狠狠色丁香婷婷综合久久五月| 久久婷婷人人澡人人| 国产精品99久久免费观看| 色婷婷噜噜久久国产精品12p| 久久综合狠狠综合久久综合88| 精品无码久久久久久国产| 99久久国产综合精品女同图片 | 亚洲国产高清精品线久久| 亚洲国产精品无码久久98| 久久精品国产亚洲一区二区三区| 日韩av无码久久精品免费| 无码8090精品久久一区| 国产成人无码精品久久久久免费| 午夜天堂精品久久久久| 欧美麻豆久久久久久中文| 国产成人精品白浆久久69| 久久精品人人槡人妻人人玩AV| 色播久久人人爽人人爽人人片aV | 93精91精品国产综合久久香蕉| 伊人久久大香线蕉av不卡| 午夜肉伦伦影院久久精品免费看国产一区二区三区| 伊人久久五月天| 中文精品99久久国产 | 丁香狠狠色婷婷久久综合| 99久久国产综合精品女同图片| 亚洲一区精品伊人久久伊人| 久久久久亚洲AV无码专区桃色 | 大香伊人久久精品一区二区| 亚洲国产成人乱码精品女人久久久不卡| 亚洲国产成人久久精品动漫| 精品国产乱码久久久久久郑州公司|