lua中定義操作符行為的元方法(重載操作符)
阿新 • • 發佈:2017-09-15
enc lua new metatable ret return add del 重載
在c++中可以重載操作符,在lua中也有,不過lua是通過元方法實現的,異曲同工,都是一樣的
比如c++,重載了+之後,具體做什麽都是自己實現,lua也一樣
定義操作符行為的元方法有:
__add | 對應的運算符 ‘+‘. 可以定義已定義操作符的表和其他表相加的行為,以及操作的值(返回值)(下同) |
__sub | 對應的運算符 ‘-‘. |
__mul | 對應的運算符 ‘*‘. |
__div | 對應的運算符 ‘/‘. |
__mod | 對應的運算符 ‘%‘. |
__unm | 對應的運算符 ‘-‘. 可以定義已定義操作符的表,在負的時候的行為,以及操作的值(返回值) |
__concat | 對應的運算符 ‘..‘. |
__eq | 對應的運算符 ‘==‘. |
__lt | 對應的運算符 ‘<‘. |
__le | 對應的運算符 ‘<=‘. |
例:
1.二元操作符
t = setmetatable({1},{__add =
function(mytable, newtable)
--body
--這裏定義__add元方法通過+號遇到另一個table時的行為
--return table
end})
這個模型適用於二元操作符,上面是定義了兩表相加的具體操作,最後必須放回一個表,表示相加的值,所有的二元操作符都可以使用這個模型
2.一元操作符
負號是一元操作符
t = setmetatable({1},{__unm =
function(mytable)
--body
--這裏定義表遇到負號時的行為以及他的值
--return table
end})
lua中定義操作符行為的元方法(重載操作符)