婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Lua中關于元方法的一些知識點小結

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

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

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

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。
我感覺我會說的比較多,還是明晚再寫吧。

您可能感興趣的文章:
  • Lua中使用元表(metatable)執行算術類元方法實例
  • Lua中的元表(metatable)、元方法(metamethod)詳解

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

巨人網絡通訊聲明:本文標題《Lua中關于元方法的一些知識點小結》,本文關鍵詞  Lua,中,關于,元,方法,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Lua中關于元方法的一些知識點小結》相關的同類信息!
  • 本頁收集關于Lua中關于元方法的一些知識點小結的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 博爱县| 九江市| 长子县| 嵩明县| 郁南县| 威海市| 龙州县| 沙河市| 仪陇县| 九江市| 乌拉特前旗| 买车| 神木县| 苍梧县| 图木舒克市| 普洱| 周至县| 六安市| 库伦旗| 洪泽县| 阿荣旗| 宜都市| 新竹县| 井陉县| 平南县| 江山市| 和田县| 肥城市| 昌图县| 佛山市| 富锦市| 阿城市| 延津县| 城固县| 永寿县| 临西县| 博湖县| 潞西市| 桃江县| 丽江市| 通城县|