国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

Lua中rawset和rawget的作用淺析

2024-07-21 23:04:33
字體:
來源:轉載
供稿:網友

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

復制代碼 代碼如下:

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)) 

打印結果是:nil。這里的元表中__index函數就不再起作用了。
但是rawset呢,起什么作用呢?我們再來運行一段代碼。
復制代碼 代碼如下:

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了。可見,程序陷入了死循環。因為w.wangbin這個元素本來就不存在表中,然后這里不斷執行進入__newindex,陷入了死循環。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 康马县| 城口县| 海安县| 淅川县| 南木林县| 民丰县| 柳江县| 孙吴县| 汽车| 林甸县| 拉萨市| 界首市| 赤峰市| 白城市| 正阳县| 宿松县| 方山县| 昌吉市| 安国市| 施秉县| 卫辉市| 新巴尔虎右旗| 通榆县| 聊城市| 邢台县| 嫩江县| 灵石县| 昌乐县| 武夷山市| 彰化市| 藁城市| 富裕县| 神池县| 连州市| 西华县| 宣武区| 林州市| 龙南县| 杨浦区| 隆昌县| 南华县|