主頁 > 知識庫 > Lua中rawset和rawget的作用淺析

Lua中rawset和rawget的作用淺析

熱門標簽:個人怎么在地圖標注需要的店鋪 漳州智云呼電話機器人 怎么去除地圖標注 新岸線智能電銷機器人 武漢外呼防封系統(tǒng)多少錢 地圖標注大廈 冀州市地圖標注 清朝地圖標注哈爾濱 百度地圖標注早餐區(qū)域

rawget是為了繞過__index而出現(xiàn)的,直接點,就是讓__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函數(shù)就不再起作用了。
但是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了。可見,程序陷入了死循環(huán)。因為w.wangbin這個元素本來就不存在表中,然后這里不斷執(zhí)行進入__newindex,陷入了死循環(huán)。

您可能感興趣的文章:
  • Linux的wget命令詳解
  • Linux下模擬http的get/post請求(curl or wget)詳解
  • Linux中curl命令和wget命令的使用介紹與比較
  • 每天一個linux命令(61):wget命令詳解
  • C語言實現(xiàn)類似wget的進度條效果
  • PowerShell小技巧之實現(xiàn)文件下載(類wget)
  • vbs結合wget 實現(xiàn)下載網(wǎng)站圖片
  • apache使用.htaccess文件實現(xiàn)屏蔽wget下載網(wǎng)站內容
  • windows系統(tǒng)配制wget計劃任務腳本
  • wget各種選項分類列表與下載
  • dos利用wget.exe讓殺毒軟件升級更自動化
  • 使用wget遞歸鏡像網(wǎng)站

標簽:金昌 天門 臺灣 宣城 德宏 濰坊 儋州 天門

巨人網(wǎng)絡通訊聲明:本文標題《Lua中rawset和rawget的作用淺析》,本文關鍵詞  Lua,中,rawset,和,rawget,的,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Lua中rawset和rawget的作用淺析》相關的同類信息!
  • 本頁收集關于Lua中rawset和rawget的作用淺析的相關信息資訊供網(wǎng)民參考!
  • 推薦文章