欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Lua中rawset和rawget的作用淺析

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

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

復(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呢,起什么作用呢?我們再來運(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了??梢姡绦蛳萑肓怂姥h(huán)。因?yàn)閣.wangbin這個元素本來就不存在表中,然后這里不斷執(zhí)行進(jìn)入__newindex,陷入了死循環(huán)。

相關(guān)文章

  • Lua中table的幾種構(gòu)造方式詳解

    Lua中table的幾種構(gòu)造方式詳解

    這篇文章主要介紹了Lua中table的幾種構(gòu)造方式詳解,本文介紹了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ù)類型概述、相關(guān)命令列表、命令示例、鏈表結(jié)構(gòu)的小技巧等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Lua table中安全移除元素的方法

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

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

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

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

    Lua中的__index和__newindex實(shí)例

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

    Lua中的元表和元方法學(xué)習(xí)筆記

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

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

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

    簡單談?wù)刲ua和c的交互

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

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

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

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

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

最新評論