最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Lua中關(guān)于元方法的一些知識(shí)點(diǎn)小結(jié)

 更新時(shí)間:2014年09月15日 08:52:14   作者:笨木頭  
這篇文章主要介紹了Lua中關(guān)于元方法的一些知識(shí)點(diǎn)小結(jié),本文講解了兩個(gè)具有不同元表的值進(jìn)行算術(shù)操作、關(guān)系類的元方法、保護(hù)元表,需要的朋友可以參考下

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

1.兩個(gè)具有不同元表的值進(jìn)行算術(shù)操作(比如加法)

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

對(duì)于這種情況,Lua是這樣處理:

a.如果第一個(gè)值有元表,就以這個(gè)元表為準(zhǔn)
b.否則,如果第二個(gè)值有元表,就用第二個(gè)值的元表
c.如果兩個(gè)值都沒有元表,或者沒有對(duì)于的元方法,那么,就會(huì)報(bào)錯(cuò)
 

2.關(guān)系類的元方法

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

3.保護(hù)元表

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

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

比如某天你當(dāng)了主程,你寫了一個(gè)很牛的模塊,因?yàn)槟承┰蛞唤o一個(gè)剛畢業(yè)不到30年的學(xué)生去修改。

(小若:畢業(yè)30年那還叫做學(xué)生嗎?都快要退休了吧?。?/p>

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

然后,如果那個(gè)畢業(yè)不到30年的學(xué)生真的不小心去修改你的元表的話:

復(fù)制代碼 代碼如下:

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

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

4.結(jié)束

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

相關(guān)文章

  • Lua中執(zhí)行系統(tǒng)命令方法介紹

    Lua中執(zhí)行系統(tǒng)命令方法介紹

    這篇文章主要介紹了Lua中執(zhí)行系統(tǒng)命令方法介紹,Lua中有兩種方法可以執(zhí)行操作系統(tǒng)內(nèi)置命令,需要的朋友可以參考下
    2015-04-04
  • Lua中的遞歸函數(shù)寫法實(shí)例

    Lua中的遞歸函數(shù)寫法實(shí)例

    這篇文章主要介紹了Lua中的遞歸函數(shù)寫法實(shí)例,本文直接給出代碼實(shí)例,并作了簡潔注釋,需要的朋友可以參考下
    2015-04-04
  • Lua中的函數(shù)精講筆記

    Lua中的函數(shù)精講筆記

    這篇文章主要介紹了Lua中的函數(shù)精講筆記,本文講解了函數(shù)的用途、可變參數(shù)函數(shù)、閉包、非全局函數(shù)等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Lua字符串模式匹配函數(shù)小結(jié)

    Lua字符串模式匹配函數(shù)小結(jié)

    這篇文章主要介紹了Lua字符串模式匹配函數(shù)小結(jié),本文涉及一些正則操作,需要的朋友可以參考下
    2014-11-11
  • 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協(xié)同程序函數(shù)coroutine使用實(shí)例

    Lua協(xié)同程序函數(shù)coroutine使用實(shí)例

    這篇文章主要介紹了Lua協(xié)同程序函數(shù)coroutine使用實(shí)例,協(xié)程是協(xié)同程序的簡稱,顧名思義,就是協(xié)同工作的程序,需要的朋友可以參考下
    2014-09-09
  • Lua table簡明總結(jié)

    Lua table簡明總結(jié)

    這篇文章主要介紹了Lua table簡明總結(jié),table是lua唯一的數(shù)據(jù)結(jié)構(gòu),table 是 lua 中最重要的數(shù)據(jù)類型,本文詳細(xì)講解了table的相關(guān)知識(shí),需要的朋友可以參考下
    2014-10-10
  • Lua面向?qū)ο笾惡屠^承

    Lua面向?qū)ο笾惡屠^承

    這篇文章主要介紹了Lua面向?qū)ο笾惡屠^承,本文講解了Lua面向?qū)ο笞罨镜闹R(shí)類和繼承,需要的朋友可以參考下
    2014-09-09
  • C語言模塊回調(diào)Lua函數(shù)的兩種方法

    C語言模塊回調(diào)Lua函數(shù)的兩種方法

    這篇文章主要介紹了C語言模塊回調(diào)Lua函數(shù)的兩種方法,本文講解了C保存函數(shù)對(duì)象、C訪問Lua全局環(huán)境兩種方法,需要的朋友可以參考下
    2015-04-04
  • Lua中模塊以及實(shí)現(xiàn)方法指南

    Lua中模塊以及實(shí)現(xiàn)方法指南

    從Lua 5.1開始,我們可以使用require和module函數(shù)來獲取和創(chuàng)建Lua中的模塊。從使用者的角度來看,一個(gè)模塊就是一個(gè)程序庫,可以通過require來加載,之后便得到一個(gè)類型為table的全局變量。
    2015-04-04

最新評(píng)論

苏尼特右旗| 扎鲁特旗| 贵阳市| 南汇区| 普格县| 山西省| 措勤县| 绥化市| 达尔| 应用必备| 雅安市| 上犹县| 香港 | 石林| 海伦市| 宜宾县| 霍城县| 赣州市| 瑞丽市| 新平| 辉南县| 明水县| 许昌市| 乐至县| 绥江县| 兴安县| 昌图县| 鲜城| 嵩明县| 罗平县| 万源市| 嘉定区| 来凤县| 韶关市| 万年县| 凤台县| 逊克县| 荔波县| 黄浦区| 白玉县| 富川|