Lua學習筆記-metatable元表

來源:互聯網
上載者:User

標籤:字串   col   執行方法   class   str   設定   add   函數   相等   

   本以為看完C API lua就學的差不多了,沒想到越陷越深啊。

   首先說元表的概念,元表是一個特殊的表,作用是定義一個表的操作。類似於C++中類的運算子多載。

   使用元表需要注意的事項:

1.元表可以定義的操作有下面這些

 1 __add(a, b) --加法 2 __sub(a, b) --減法 3 __mul(a, b) --乘法 4 __div(a, b) --除法 5 __mod(a, b) --模數 6 __pow(a, b) --乘冪 7 __unm(a) --相反數 8 __concat(a, b) --串連 9 __len(a) --長度10 __eq(a, b) --相等11 __lt(a, b) --小於12 __le(a, b) --小於等於13 __index(a, b) --索引查詢14 __newindex(a, b, c) --索引更新(PS:不懂的話,後面會有講)15 __call(a, ...) --執行方法調用16 __tostring(a) --字串輸出17 __metatable --保護元表
View Code

2.上面的操作其實是table中一個鍵對應一個函數,鍵字串前面是雙底線(簡直坑啊,第一次寫半天沒發現錯誤)

3.如果兩個表都有定義元表,那麼按照下面原則調用:

  • 對於二元操作符,如果第一個運算元有元表,並且元表中有所需要的欄位定義,比如我們這裡的__add元方法定義,那麼Lua就以這個欄位為元方法,而與第二個值無關;
  • 對於二元操作符,如果第一個運算元有元表,但是元表中沒有所需要的欄位定義,比如我們這裡的__add元方法定義,那麼Lua就去尋找第二個運算元的元表;
  • 如果兩個運算元都沒有元表,或者都沒有對應的元方法定義,Lua就引發一個錯誤。

 

元表的設定與擷取

1 setmetatable(table,metatable): 對指定table設定元表(metatable),如果元表(metatable)中存在__metatable索引值,setmetatable會失敗 。2 getmetatable(table): 返回對象的元表(metatable)。

 

下面是例子,這個例子是簡單的定義一個“+”運算子,將兩個table中對應鍵的值相加再返回一個新表。至於表的大小是否相等,對應位置類型是否一致,沒有做細節處理,這些不是重點。

 1 function add(a,b)            --定義__add需要用到的函數 2  local sum={} 3  for i,v in ipairs(a) do 4   sum[i]=a[i]+b[i] 5  end 6 return sum 7 end 8  9 a={1,2,3}         10 b={9,8,7}11 t={__add=add}          --聲明一個表t作為元表,其中__add鍵對應的值為add函數12 setmetatable(a,t)      --設定a的元表為t13 sum=a+b                --計算a+b,返回新表sum,並且列印14 for i in ipairs(sum) do15 print(sum[i])16 end17 18 運行結果:19 1020 1021 10

 

Lua學習筆記-metatable元表

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.