Metamethods
Metamethods are special functions used by Lua to customize the behavior of values when they participate in operations. They live in metatables and are invoked automatically by the interpreter when a corresponding operation is performed on a value with an associated metatable. Metamethods enable features such as operator overloading, custom indexing, and configurable invocation semantics.
Common metamethods include add, sub, mul, div, mod, pow and unm for arithmetic; concat for string concatenation;
Implementation typically involves assigning a metatable to a value and defining the metamethods under their special
While metamethods are a Lua feature, the idea of special methods that redefine operator and language-construct