一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Lua - Lua中關于元方法的一些知識點小結

Lua中關于元方法的一些知識點小結

2020-04-09 14:12笨木頭 Lua

這篇文章主要介紹了Lua中關于元方法的一些知識點小結,本文講解了兩個具有不同元表的值進行算術操作、關系類的元方法、保護元表,需要的朋友可以參考下

本篇要介紹的東西比較零散,都是一些小知識點,所以就放在一起了。

1.兩個具有不同元表的值進行算術操作(比如加法)

之前舉例的時候,兩個table相加,這兩個table都是具有相同的元表的,所以沒有任何問題。
那么,如果兩個table或者兩個進行相加操作的值,具有不同的元表呢?

對于這種情況,Lua是這樣處理:

a.如果第一個值有元表,就以這個元表為準
b.否則,如果第二個值有元表,就用第二個值的元表
c.如果兩個值都沒有元表,或者沒有對于的元方法,那么,就會報錯
 

2.關系類的元方法

除了加法減法這些算術類的操作之外,大于小于等這些關系類的操作也是有元方法的:
__eq:等于
__lt:小于
__le:小于等于
 
如果對兩個具備不同元表的值進行這些比較操作,就會報錯,一定要注意,這和加減法的規則不一樣。
其實想想也很有道理,元表都不一樣了,怎么去判斷大小呢?判斷大小是要有規則的。
 
比如,在軍隊里,中尉的職位肯定是小于上校的職位。
然后,到了外星世界呢(假設有外星人)?說不定中尉是大于上校的。
所以,地球人和外星人是不能用同一種方式進行軍銜比較的。
 
當然,大家也許會說:那地球人和外星人也不能用同一種方式進行加法操作啊!
沒錯,但是,Lua就是這么規定的啊!你找作者去啊!關我什么事!
 
最后,比較特殊的,進行“等于”操作,是不會報錯的,哪怕是具有不同元表的值進行等于操作。
其實這想想也是很有道理,地球人等于外星人嗎?不等于。在外星那邊,外星人也會得到一樣的答案,即使判斷標準不同。
(小若:Lua就是這么規定的,你還有道理個毛線啊!圍繞著規則去說道理,很好玩嗎?)
 

3.保護元表

我們都知道,通過setmetatable和getmetatable可以分別設置和獲得元表。

但是,如果我們不希望元表被修改或者被看到呢?

比如某天你當了主程,你寫了一個很牛的模塊,因為某些原因要交給一個剛畢業不到30年的學生去修改。

(小若:畢業30年那還叫做學生嗎?都快要退休了吧!)

你很肯定你的某個值的元表是不能被改動的,那,你就可以把它保護起來了。
 
我們可以給元表的__metatable字段賦值,比如:mt.__metatable = “你別碰它的元表,否則過了10年的試用期之后,你就等著走人吧!”

然后,如果那個畢業不到30年的學生真的不小心去修改你的元表的話:

復制代碼 代碼如下:

print(getmetatable(s1));
setmetatable(s1, mt);


將會輸出類似以下的日志:
你別碰它的元表,否則過了10年的試用期之后,你就等著走人吧!
cannot change protected metatable
 
好了,這樣這個學生就肯定不改你的元表了,畢竟工作要緊。(小若:試用期10年,真是個好公司)
 

 

4.結束

本來還想接著寫下一篇的,畢竟時間還早,但是下一篇要介紹__index和__newindex。
我感覺我會說的比較多,還是明晚再寫吧。

延伸 · 閱讀

精彩推薦
  • LuaLua簡介、編譯安裝教程及變量等語法介紹

    Lua簡介、編譯安裝教程及變量等語法介紹

    這篇文章主要介紹了Lua簡介、編譯安裝教程及變量等語法介紹,本文同時講解了lua注釋語法、Lua命令行方式等內容,需要的朋友可以參考下 ...

    junjie3632020-04-14
  • Lua深入探究Lua中的解析表達式

    深入探究Lua中的解析表達式

    這篇文章主要介紹了深入探究Lua中的解析表達式,對于其語法部分的說明和示例都超詳細,極力推薦此文!需要的朋友可以參考下 ...

    腳本之家3542020-05-05
  • LuaLua中table庫函數方法介紹

    Lua中table庫函數方法介紹

    這篇文章主要介紹了Lua中table庫函數方法介紹,本文講解了concat、insert、maxn、remove、sort、foreachi等方法,需要的朋友可以參考下 ...

    腳本之家2502020-04-17
  • LuaLua教程(二):基礎知識、類型與值介紹

    Lua教程(二):基礎知識、類型與值介紹

    這篇文章主要介紹了Lua教程(二):基礎知識、類型與值介紹,本文講解了Hello World程序、代碼規范、全局變量、類型與值等內容,需要的朋友可以參考下 ...

    腳本之家5922020-04-28
  • LuaLua中計算、執行字符串中Lua代碼的方法

    Lua中計算、執行字符串中Lua代碼的方法

    這篇文章主要介紹了Lua中計算、執行字符串中Lua代碼的方法,類似JavaScript中eval函數的功能,在Lua中也可以實現,需要的朋友可以參考下 ...

    腳本之家6322020-04-30
  • LuaLua和C語言的交互詳解

    Lua和C語言的交互詳解

    這篇文章主要介紹了Lua和C語言的交互詳解,Lua和C語言通過棧完成交互,本文結合代碼實例詳細講解了交互的方法,需要的朋友可以參考下 ...

    果凍想3702020-04-14
  • LuaLua實現__add方法重載示例

    Lua實現__add方法重載示例

    這篇文章主要介紹了Lua實現__add方法重載示例,本文直接給出實現代碼,需要的朋友可以參考下 ...

    腳本之家7452020-04-24
  • LuaLua中的元方法__newindex詳解

    Lua中的元方法__newindex詳解

    這篇文章主要介紹了Lua中的元方法__newindex詳解,本文講解了查詢與更新、監控賦值、通過table給另一個table賦值等內容,需要的朋友可以參考下 ...

    笨木頭8872020-04-09
主站蜘蛛池模板: 国产91免费 | 视频在线观看高清免费看 | 亚洲精品久久久久69影院 | 欧美一级片在线看 | 欧美一级特黄特色大片免费 | 日本护士xxxx爽爽爽 | 四虎影在线永久免费观看 | 亚洲欧洲日产国码无码av | 脱jk裙的美女露小内内无遮挡 | 国产成人理在线观看视频 | 99热99在线 | 免费jizz在在线播放国产 | 跪在老师脚下吃丝袜脚 | aⅴ视频在线免播放观看 | 日本在线精品视频 | 国产91在线精品狼人 | 日本一区二区精品88 | 国产99视频精品免视看7 | 肉宠文很肉到处做1v1 | 欧美艳星kagneyiynn高清 | 国产精品久久久久久久久久久搜索 | 久久99精品涩AV毛片观看 | free service性v极品| 亚洲欧美成人中文在线网站 | 婷婷精品 | 激情影院费观看 | 天天夜夜啦啦啦 | 成人精品福利 | 99精品国产高清自在线看超 | 99操视频| 成人动漫影院 | 风间由美理论片在线观看 | 黑人好大好硬好深好爽想要h | 99精品免费观看 | 亚洲午夜精品久久久久久人妖 | 欧美大陆日韩一区二区三区 | 国产99在线观看 | 国产资源视频在线观看 | 校花被扒开尿口折磨憋尿 | 亚洲精彩视频在线观看 | 无限时间看片在线观看 |