廢話不多說,這篇就讓我們來看看有關元表操作符的問題。
許多元表的索引是操作符(如, +、-等),允許你使用表完成一些操作運算子。例如,我們想要乙個表支援乘法操作符(*), 我們可以這樣做:
t = setmetatable(,
for i = 1, other do
for _, v in ipairs(t) do
table.insert(new, v)
endend
return new
end })
t = t * 2 -- 當呼叫乘法運算子時, 此時會調入__mul函式, t = , other = 2,執行函式得到new =
__add:加法(+)
__sub:減法(-)
__mul:乘法(*)
__div:除法(/)
__mod:取模(%)
__unm:取反(-), 一元操作符
__concat:連線(..)
__len:取長度(#)
__eq:等於(==)
__lt:小於(<)
__le:小於等於(<=)
注:(只有==, < , <=, 因為你能通過上面的實現所有操作符, 事實上== 和 < 就足夠了)
__call
接下來講講__call索引, 它允許你把表當函式呼叫,例如:
t = setmetatable({}, )
t(1, 2, 3, 4) -- 24, 表t在呼叫時先查詢__call, 呼叫裡面的函式, 此時a = 1, b = 2, c = 3, whatever = 4
__call非常有用, 經常用來在表和它裡面的函式之間**呼叫。
__tostring
如果想實現__tostring, 那麼tostring可以把錶轉換為string, 非常方便類似print的函式使用。一般情況下, 當你把表轉為string時, 你需要"table: 0x < hex - code -here", 但是你可以僅用__tostring來解決,例:
t = setmetatable(, )
print(type(t), t) -- prints out --> table "sum: 6"
本文參考lua手冊
lua從入門到放棄 八 lua運算子
運算子是乙個特殊的符號,用於告訴直譯器執行特定的數學或邏輯運算.lua提供了以下幾種運算子型別 算術運算子 關係運算子 邏輯運算子 其它運算子 下表列出了lua語言中的常用算術運算子,假設a為10,b為20 操作符描述例項 加號a b 30 減號 a b 10 乘號 a b 200 除號 a b 0...
lua從入門到放棄 五 lua迴圈
lua語言提供了以下幾種迴圈方式 迴圈型別 描述while迴圈 在條件為true時,迴圈地執行某些語句,在執行前會先判斷條件是否為true for迴圈 重複執行指定語句,重複次數可在for語句中控制 repeat util 重複執行迴圈,直到指定的條件為真為止 迴圈巢狀 可以在迴圈內巢狀乙個或多個迴...
lua從入門到放棄 四 變數
變數在使用前,必須顯式地宣告變數,即建立該變數.編譯程式在執行 之前編譯器需要知道如何給語句變數開闢儲存區,用於儲存變數的值.lua變數有三種型別 全域性變數,區域性變數,表中的域.lua中的變數全是全域性變數,哪怕是語句塊和函式裡,除非顯式地用local宣告為區域性變數.區域性變數的作用域為從宣告...