好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Lua中的元方法__newindex詳解

Lua中的元方法__newindex詳解

熱門標簽:400手機電話免費辦理 上海企業外呼系統排名 如何利用高德地圖標注家 揚州電銷外呼系統軟件 智能語音電銷的機器人 開通400電話申請流程 電腦外呼系統輻射大嗎 武漢百應人工智能電銷機器人 百度地圖標注位置網站

好吧,我寫文章的進度已經趕不上看書的進度了,簡單的幾段文字就夠我嘮叨一篇文章了。

今天繼續來說說元方法,與__index有點相似的__newindex元方法。

1.查詢與更新

上一篇文章我們介紹了__index元方法,總結來說,__index元方法是用于處理調用table中不存在的字段。

注意,【調用】這個詞,只是調用,而不是賦值。
 
如果,我們要對table中某個不存在的字段賦值呢?(小若:就,直接賦值啊!)

沒錯,我們直接就能賦值了,不會報錯的。

問題是,如果我想監控這個操作呢?如果有人想對table不存在的字段進行賦值的時候,我想進行一些額外的處理呢?

這時候就要用到__newindex。
 
大家要記住這句話:__index用于查詢,__newindex用于更新。

等會不要混亂了, 初次接觸的話,有可能會混亂。

2.看看普通的賦值情況

我們先來看看正常情況下的賦值,如代碼:

復制代碼 代碼如下:

    local smartMan = {
        name = "none",
        money = 9000000,
      
        sayHello = function()
            print("大家好,我是聰明的豪。");
        end
    }
  
    local t1 = {};
  
    local mt = {
        __index = smartMan,
    }
  
    setmetatable(t1, mt);
  
    t1.sayHello = function()
        print("en");
    end;
  
    t1.sayHello();

這是上一篇用過的例子,一個模仿繼承結構的例子。
來分析一下,mt作為t1的元表,設置__index為smartMan。
于是,當我們調用t1中不存在的字段時,就會自動去smartMan中查找。
比如我們調用了t1.sayHello(),自然能找到對應的函數。
 
先來看看輸出結果:

復制代碼 代碼如下:

[LUA-print] en

我們調用t1的sayHello字段,t1并不存在這個字段(雖然可以通過__index的方式來找到smartMan的sayHello字段)。

但這不影響,給這個字段賦值,然后再調用t1.sayHello(),發現是成功的。

這和我們以往的做法一樣,對table做正常的賦值操作,不管table本身是否存在這個字段。

3.監控賦值

好了,普通情況我們已經試過了,如果我們想監控table的賦值操作呢?
對于不存在的字段,我們不需要被賦值呢?想要制作一個只讀的table呢?
 
如果你有這些想法,那么歡迎撥打屏幕下方的號碼,前10位打進的還贈送價值..(小若:停!)
那么,如果你有這些想法,請看看下面的代碼:

復制代碼 代碼如下:

    local smartMan = {
        name = "none",
        money = 9000000,
      
        sayHello = function()
            print("大家好,我是聰明的豪。");
        end
    }
  
    local t1 = {};
  
    local mt = {
        __index = smartMan,
        __newindex = function(table, key, value)
            print(key .. "字段是不存在的,不要試圖給它賦值!");
        end
    }
  
    setmetatable(t1, mt);
  
    t1.sayHello = function()
        print("en");
    end;
    t1.sayHello();

留意mt元表,我們給它加了一個__newindex。
運行代碼,輸出結果如下:

復制代碼 代碼如下:

[LUA-print] sayHello字段是不存在的,不要試圖給它賦值!
[LUA-print] 大家好,我是聰明的豪。

很顯然,sayHello字段賦值失敗,因為給sayHello字段賦值的時候,調用了__newindex元方法,代替了賦值操作。

(小若:為什么?sayHello字段不是存在的么?為什么會說不存在呢?)
 
這里有一個地方要注意的,t1中確實是不存在sayHello字段的,它只是因為有元表存在,而元表里的__index元方法的值是smartMan這個table。

從而,可以在t1找不到sayHello字段的時候,去smartMan中尋找。

但,實際上,t1確實是不存在sayHello字段的,不知道大家能繞明白不?
 
因此,當試圖給t1的sayHello字段賦值時,Lua判定sayHello字段是不存在的,所以會去調用元表里的__newindex元方法。

__newindex元方法被調用的時候會傳入3個參數:table本身、字段名、想要賦予的值。

4.隔山打牛,通過給一個table給另一個table的字段賦值

和__index一樣,__newindex元方法也可以賦予一個table值。
這種情況下就有點意思了,先看看代碼:

復制代碼 代碼如下:

    local smartMan = {
        name = "none",
    }
  
    local other = {
        name = "大家好,我是很無辜的table"
    }
  
    local t1 = {};
  
    local mt = {
        __index = smartMan,
        __newindex = other
    }
  
    setmetatable(t1, mt);
    
    print("other的名字,賦值前:" .. other.name);
    t1.name = "小偷";
    print("other的名字,賦值后:" .. other.name);
    print("t1的名字:" .. t1.name);

這次的代碼和剛剛差不多,但是我們新加了一個other的table,然后把other作為__newindex的值。

于是,當給t1的name字段賦值時,就會發生一些奇怪的事情…

先來看看輸出結果:

復制代碼 代碼如下:

[LUA-print] other的名字,賦值前:大家好,我是很無辜的table
[LUA-print] other的名字,賦值后:小偷
[LUA-print] t1的名字:none

當給t1的name字段賦值后,other的name字段反而被賦值了,而t1的name字段仍然沒有發生變化。

(實際上t1的name字段還是不存在的,它只是通過__index找到了smartMan的name字段,這個就不嘮叨了。)

于是,我們給t1的name賦值的時候,實際上是給other的name賦值了。

好吧,可憐的other。

5.總結規則

這就是__newindex的規則:

a.如果__newindex是一個函數,則在給table不存在的字段賦值時,會調用這個函數。
b.如果__newindex是一個table,則在給table不存在的字段賦值時,會直接給__newindex的table賦值。

6.結束

好了,關于元表和元方法的基礎內容基本上告一段落了,接下來還有一篇關于元表和元方法的文章,也是一些比較零散的知識點。

之后,還會提到元表和元方法的,因為它們實在是太重要了。

您可能感興趣的文章:
  • Lua中強大的元方法__index詳解
  • Lua中__index和__newindex之間的沉默與合作

標簽:江西 張掖 宜賓 武漢 黑龍江 嘉峪關 延邊 新余

巨人網絡通訊聲明:本文標題《Lua中的元方法__newindex詳解》,本文關鍵詞  Lua,中的,元,方法,newindex,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Lua中的元方法__newindex詳解》相關的同類信息!
  • 本頁收集關于Lua中的元方法__newindex詳解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 国产欧美日韩精品夜色在线不卡 | 欧美a一级片| 黄色免费看软件| 韩国朴恩率跳舞露下毛| 艳鉧动漫1~6日本全集在线播放| 久久WW精品W免费人成女人 | 免费看黄色毛片| 国产在线乱码在线视频| 无套内谢少妇毛片A片软件美国 | 爸爸说家里没人的时候可以做| 试看A片成人免费区| 欧美成人第一页| 亚丝娜被?吸乳羞羞| 亚洲视频一二区| 好紧好爽好湿别拔出来视频男男| 免费女人光着全身照片无遮盖 | 女主被蛇人双根高h嗯啊| 桃子视频在线直播高清观看| 久久精品国产亚洲AV麻豆蜜芽| 一起草会,17c| 999久久久国产| 性表演xxx直播在线| 《武则天荒婬史》在线播放| 丰满的女教师HD高清在线观看| 柳岩里面好紧水好多好滑免费| 色之综合天天综合色天天棕色| 国产麻豆精品在线| 免费的很黄的吸乳A片| 女人高潮一级A片69式小说| 风流老太婆大bbwbbwhd视频| 欧美一级日韩一级亚洲一级va| 日本A片色情AAA片wwwCccC| 色哟哟久久| 国产乱码精品一区二区三区蜜柚| 日本激情图片| 成人品红斤子最你的影| 欧美性猛交XXXX乱大交派对| 最新精品国偷自产在线学生| 男女生性毛片免费观看| 欧美精品第一页| 95免费视频在线观看|