# Arithmetic metamethods

The arithmetic metamethods define how an object will behave when used within an arithmetic operation. The arithmetic metamethods are listed here:

- __add is called for the + operator
- __sub is called for the - operator
- __mul is called for the * operator
- __div is called for the / operator
- __pow is called for the ^ operator
- __mod is called for the % operator
- __unm is called for negation (for example y = -x)

**Example**

```
mt={}
mt["__add"] = function(a,b)
if type(b) == "string" then
a[#a+1] = b
elseif getmetatable(a) == getmetatable(b) then
for k,v in pairs(b) do
a[#a+1] = v
end
else
error("Invalid datatype for + operator!",0)
end
return a
end
t={}
setmetatable(t,mt);
-- Now use + to call the __add metamethod of the table t
t1 = t + "foo" --> t[1] = "foo"
t1 = t + "bar" --> t[2] = "bar"
```