亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Lua中rawset和rawget的作用淺析

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

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了??梢姡绦蛳萑肓怂姥h(huán)。因為w.wangbin這個元素本來就不存在表中,然后這里不斷執(zhí)行進入__newindex,陷入了死循環(huán)。

相關文章

  • Lua中table的幾種構造方式詳解

    Lua中table的幾種構造方式詳解

    這篇文章主要介紹了Lua中table的幾種構造方式詳解,本文介紹了Lua調(diào)試工具LuaEditor、什么是table、創(chuàng)建一個table、初始化一個table等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • Redis教程(三):List數(shù)據(jù)類型

    Redis教程(三):List數(shù)據(jù)類型

    這篇文章主要介紹了Redis教程(三):List數(shù)據(jù)類型,本文講解了List數(shù)據(jù)類型概述、相關命令列表、命令示例、鏈表結構的小技巧等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Lua table中安全移除元素的方法

    Lua table中安全移除元素的方法

    這篇文章主要介紹了Lua table中安全移除元素的方法,本文給出3種實現(xiàn)方法,分別是從后往前刪除和while刪除,需要的朋友可以參考下
    2015-06-06
  • Lua性能優(yōu)化技巧(二):基本事實

    Lua性能優(yōu)化技巧(二):基本事實

    這篇文章主要介紹了Lua性能優(yōu)化技巧(二):基本事實,本文講解了一些編譯器和寄存器的一些知識,需要的朋友可以參考下
    2015-04-04
  • Lua中的__index和__newindex實例

    Lua中的__index和__newindex實例

    這篇文章主要介紹了Lua中的__index和__newindex實例,本文講解了具有默認值的table、記錄table的訪問、只讀的table等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • Lua中的元表和元方法學習筆記

    Lua中的元表和元方法學習筆記

    這篇文章主要介紹了Lua中的元表和元方法學習筆記,本文主要講解了getmetatable獲取元表、setmetatable修改元表等內(nèi)容,需要的朋友可以參考下
    2014-12-12
  • Ruby元編程技術詳解(Ruby Metaprogramming techniques)

    Ruby元編程技術詳解(Ruby Metaprogramming techniques)

    這篇文章主要介紹了Ruby元編程技術詳解(Ruby Metaprogramming techniques),本文講解了11個關于元編程的技術和技巧,需要的朋友可以參考下
    2015-04-04
  • 簡單談談lua和c的交互

    簡單談談lua和c的交互

    要理解Lua和C++交互,首先要理解Lua堆棧。簡單來說,Lua和C/C++語言通信的主要方法是一個無處不在的虛擬棧。棧的特點是先進后出。
    2016-01-01
  • Lua 數(shù)學庫的所有函數(shù)功能作用一覽

    Lua 數(shù)學庫的所有函數(shù)功能作用一覽

    這篇文章主要介紹了Lua 數(shù)學庫的所有函數(shù)功能作用一覽,本文羅列了lua數(shù)學庫的所有函數(shù),并對每個函數(shù)的功能作用做了簡短描述,需要的朋友可以參考下
    2015-06-06
  • Lua中break語句的使用方法詳解

    Lua中break語句的使用方法詳解

    這篇文章主要介紹了Lua中break語句的使用方法詳解,是Lua入門學習中的基礎知識,需要的朋友可以參考下
    2015-05-05

最新評論