国产探花免费观看_亚洲丰满少妇自慰呻吟_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,陷入了死循環。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 柘荣县| 泽库县| 噶尔县| 巫山县| 商洛市| 呼伦贝尔市| 四川省| 韶山市| 鲁甸县| 蓝田县| 当涂县| 曲麻莱县| 黎平县| 巴林左旗| 邹城市| 道孚县| 博兴县| 巍山| 环江| 黔西| 冀州市| 彭水| 敖汉旗| 桐庐县| 丰宁| 安福县| 老河口市| 印江| 绍兴县| 桃源县| 石渠县| 余干县| 岳阳县| 新巴尔虎右旗| 麦盖提县| 平阳县| 祁门县| 阿鲁科尔沁旗| 尚义县| 咸丰县| 甘谷县|