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

主頁 > 知識庫 > Lua中的元表(metatable)、元方法(metamethod)詳解

Lua中的元表(metatable)、元方法(metamethod)詳解

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

終于到了在實際中經常要用到的內容了——元表與元方法。

在第一次看見這兩樣東西的時候,可能會覺得它很深奧,但其實很好理解,雖然實際上它可能真的很深奧。(小若:停!滾粗。)

1.知道為什么1 + 1 = 2嗎?

為什么在Lua中,1+1會等于2呢?(小若:難道除了Lua,其他地方就不等于2了?)
為什么數字和數字相加是合法的,為什么table和table相加就會報錯?大家有想過這些問題嗎?
 
沒錯,規則,這一切都只是規則而已,Lua規定了數字之間可以進行加減乘除,而table之間則不可以。

這是因為,在人類世界里,并沒有table和table相加的概念。
 
而在Lua中,進行這些規則限定的秘密就在于元表和元方法。

2.元方法

元方法,聽起來很深奧,其實它就是格子類型變量之間進行特殊操作的函數。
比如,數字的相加,它可能僅僅是一個函數。

比如:1+1  ,在底層里,它可能是這樣的:add(1, 1)。而add函數就是用來計算兩個數字間相加的結果。

再如:10X15,它可能是這樣的:mul(10, 15)。mul函數就能返回兩個數字相乘的結果。
(可能這例子不太恰當,但就是這么個意思~)
 
最后,如果是兩個table呢?

復制代碼 代碼如下:

local t1 = {};
local t2 = {};
t1 + t2;

它可能就是這樣的:????
沒錯,Lua中不存在可以計算兩個table相加的函數,也就是說,不存在這樣的元方法。

3.元表

元表本身并沒有什么作用,它是用來存放元方法的一個table。

Lua中的每一個值都有或者可以有一個元表,table和userdata可以各種擁有獨立的元表。
但是,其他類型的值就只能共享其類型所屬的元表,比如,數字,所有的數字都共用一個元表。

4.改變規則

如果說,我們就是希望將兩個table進行相加呢?
試試看,如下代碼:

復制代碼 代碼如下:

    local t1 = {};
    local t2 = {};
    local result = t1 + t2;

直接運行肯定報錯的。

因此,為了滿足我們這種需求,Lua允許我們修改元表。

一個元表,其實就是一個table值,所以,我們只需要新建一個table,添加元方法即可。

比如加法運算的元方法就是:__add,這是Lua規定的。

只要某個值的元表里含有__add這個元方法,那就可以使用+號進行運算。
 
如下代碼:

復制代碼 代碼如下:

    -- 創建一個元表
    local mt = {};
    mt.__add = function(t1, t2)
        print("兩個table相加的結果就是...神經病啊!table有什么好相加的啊!");
    end
    local t1 = {};
    local t2 = {};
  
    -- 給兩個table設置新的元表
    setmetatable(t1, mt);
    setmetatable(t2, mt);
  
    -- 進行加法操作
    local result = t1 + t2;

首先創建了一個table變量mt,給這個table新增一個元素__add,這個table就擁有了作為元表的資格了。

然后創建兩個新的table變量,使用setmetatable函數給table設置新的元表,此時,兩個table變量就以mt作為元表了。

最后,對t1和t2進行加法操作,這時就會從元表中查找__add元方法,如果找到的話,就調用這個元方法對兩個變量進行加法操作。
 
輸出結果如下:

復制代碼 代碼如下:

[LUA-print] 兩個table相加的結果就是…神經病啊!table有什么好相加的啊!

就是這么簡單,元表和元方法其實就是給Lua里的值設定一些操作,比如加法、減法之類的,讓我們可以對這些操作自定義。
 
不過,有幾點要特別注意的:
a.創建一個新的table變量時,它是不存在元表的(可以用getmetatable函數獲取某個對象的元表,就能知道這個對象有沒有元表存在了)

b.在Lua中,只能設置table的元表,其他類型的值的元表,只能通過C代碼來完成

5.結束

好吧,其實我覺得這篇文章寫得比較亂,不是很滿意。

我想以一種更簡單的方式來介紹元表和元方法,不過,似乎適得其反了。

沒關系了,希望大家勉強能看明白~

本篇只是作為元表和元方法的概述,后面還會詳細介紹更多的內容。

您可能感興趣的文章:
  • Lua教程(九):元表與元方法詳解
  • Lua中的元表與元方法學習總結
  • 舉例說明Lua中元表和元方法的使用

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

巨人網絡通訊聲明:本文標題《Lua中的元表(metatable)、元方法(metamethod)詳解》,本文關鍵詞  Lua,中的,元表,metatable,元,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Lua中的元表(metatable)、元方法(metamethod)詳解》相關的同類信息!
  • 本頁收集關于Lua中的元表(metatable)、元方法(metamethod)詳解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 98亭亭玉立国色天香四月天科普| 亚洲精品a人在线观看| 激情偷拍网| 婢女奶咪子真大高h| 艳妇荡岳丰满交换做爰大片 | 欧美日韩国产在线人成dvd| 操人视频免费| 国产福利小视频在线观看的一区| 97色噜噜刺激有声小说| 男女滚床单| 三级网址在线观看| 金沙383直播的最新版本更新内容| 欧美肥臀大乳一区二区免费视频| 下面痒好想做快给我| 在线观看三级| 久久er国产精品| 精品人妻无码一区二区三区4| 日本精品高清一区二区2021| 免费人成黄页在线观看日本| 男人激烈吮乳吃奶动图gif| 久久亚洲成a人片| 把女人弄得特爽的黄A大片| 久久婷婷国产综合精品| 黄色电影大全| 国产成人精品久久久久开播 | 欧美成人精品一区二区免费看| 少妇婬乱全黄A片免费看楼梯裸体| 91精产一二三产区区别超碰潮喷| 国产伦精品一区二区三区免费观看| 欧美亚洲日本一区二区三区浪人| 亚洲精品国产AV婷婷在线小说| 粉嫩沟厕零距离偷拍| 边吻边摸下面好爽视频完整版| 男人j进女人p动态图片 | 亚洲AV首页闷骚寡影院我想要| 印度巨蜥视频3分52秒| 艳欲小说| 黄色软件色多多| 国产理论片午午午伦夜理片2021 | 国内精品久久久久久久软件| 利智唯一一部三级叫什么|