最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Lua中rawset和rawget的作用淺析

 更新時(shí)間:2015年04月22日 09:14:32   投稿:junjie  
這篇文章主要介紹了Lua中rawset和rawget的作用淺析,本文分別用兩段代碼演示了rawset和rawget的作用,需要的朋友可以參考下

rawget是為了繞過(guò)__index而出現(xiàn)的,直接點(diǎn),就是讓__index方法的重寫無(wú)效。(我這里用到"重寫"二字,可能不太對(duì),希望能得到糾正)

復(fù)制代碼 代碼如下:

Window = {} 
 
Window.prototype = {x = 0 ,y = 0 ,width = 100 ,height = 100,} 
Window.mt = {} 
function Window.new(o) 
    setmetatable(o ,Window.mt) 
    return o 
end 
Window.mt.__index = function (t ,key) 
    return 1000 
end 
Window.mt.__newindex = function (table ,key ,value) 
    if key == "wangbin" then 
        rawset(table ,"wangbin" ,"yes,i am") 
    end 
end 
w = Window.new{x = 10 ,y = 20} 
print(rawget(w ,w.wangbin)) 

打印結(jié)果是:nil。這里的元表中__index函數(shù)就不再起作用了。
但是rawset呢,起什么作用呢?我們?cè)賮?lái)運(yùn)行一段代碼。
復(fù)制代碼 代碼如下:

Window = {} 
Window.prototype = {x = 0 ,y = 0 ,width = 100 ,height = 100,} 
Window.mt = {} 
function Window.new(o) 
    setmetatable(o ,Window.mt) 
    return o 
end 
Window.mt.__index = function (t ,key) 
    return 1000 
end 
Window.mt.__newindex = function (table ,key ,value) 
    table.key = "yes,i am" 
end 
w = Window.new{x = 10 ,y = 20} 
w.wangbin = "55" 

然后我們的程序就stack overflow了。可見(jiàn),程序陷入了死循環(huán)。因?yàn)閣.wangbin這個(gè)元素本來(lái)就不存在表中,然后這里不斷執(zhí)行進(jìn)入__newindex,陷入了死循環(huán)。

相關(guān)文章

  • Lua極簡(jiǎn)入門指南(六):模塊

    Lua極簡(jiǎn)入門指南(六):模塊

    這篇文章主要介紹了Lua極簡(jiǎn)入門指南(六):模塊,本文講解了require函數(shù)、編寫模塊、查找模塊等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • 最新評(píng)論

    新建县| 河间市| 日喀则市| 年辖:市辖区| 泗阳县| 凭祥市| 舞钢市| 德江县| 博白县| 临武县| 河源市| 鞍山市| 循化| 扎兰屯市| 星座| 沾益县| 象山县| 缙云县| 曲麻莱县| 固原市| 梨树县| 马尔康县| 滨海县| 黔东| 万州区| 泽库县| 河南省| 读书| 浦东新区| 蓬溪县| 英吉沙县| 南平市| 万山特区| 马边| 海林市| 庆云县| 汝城县| 株洲县| 天峨县| 贺兰县| 阜康市|