1. 程式人生 > >lua中定義操作符行為的元方法(重載操作符)

lua中定義操作符行為的元方法(重載操作符)

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中定義操作符行為的元方法(重載操作符)