Advertisement
Shiranuit

Class Number

Apr 8th, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.40 KB | None | 0 0
  1. local nType = type
  2. function type(x)
  3.     if nType(x) == "table" then
  4.         if getmetatable(x) and getmetatable(x).__type then
  5.             return getmetatable(x).__type
  6.         else
  7.             return "table"
  8.         end
  9.     else
  10.         return nType(x)
  11.     end
  12. end
  13.  
  14. local function get(x)
  15.     if nType(x) == "table" and type(x) == "number" then
  16.         return getmetatable(x).__value
  17.     else
  18.         return tonumber(x)
  19.     end
  20. end
  21.  
  22. function num(x)
  23.     return setmetatable({},{__value=get(x) or 0,
  24.     __type="number",
  25.     __tostring=function(tble) return tonumber(getmetatable(tble).__value) end,
  26.     __add=function(tble,value) return num(getmetatable(tble).__value + (get(value) or 0)) end,
  27.     __sub=function(tble,value) return num(getmetatable(tble).__value - (get(value) or 0)) end,
  28.     __mul=function(tble,value) return num(getmetatable(tble).__value * (get(value) or 1)) end,
  29.     __div=function(tble,value) return num(getmetatable(tble).__value / (get(value) or 1)) end,
  30.     __pow=function(tble,value) return num(getmetatable(tble).__value ^ (get(value) or 1)) end,
  31.     __mod=function(tble,value) return num(getmetatable(tble).__value % (get(value) or 1)) end,
  32.     __unm=function(tble) return num(-getmetatable(tble).__value) end,
  33.     __index={num=function(tble) return tonumber(getmetatable(tble).__value) end},
  34.     __call=function(tble) return setmetatable({},{__type="number",
  35.     __tostring=function(ntble) return tonumber(getmetatable(tble).__value) end,
  36.     __add=function(ntble,value) getmetatable(tble).__value=getmetatable(tble).__value + (get(value) or 0) return getmetatable(tble).__value end,
  37.     __sub=function(ntble,value) getmetatable(tble).__value=getmetatable(tble).__value - (get(value) or 0) return getmetatable(tble).__value end,
  38.     __mul=function(ntble,value) getmetatable(tble).__value=getmetatable(tble).__value * (get(value) or 1) return getmetatable(tble).__value end,
  39.     __div=function(ntble,value) getmetatable(tble).__value=getmetatable(tble).__value / (get(value) or 1) return getmetatable(tble).__value end,
  40.     __pow=function(ntble,value) getmetatable(tble).__value=getmetatable(tble).__value ^ (get(value) or 1) return getmetatable(tble).__value end,
  41.     __mod=function(ntble,value) getmetatable(tble).__value=getmetatable(tble).__value % (get(value) or 1) return getmetatable(tble).__value end,
  42.     __unm=function(ntble) getmetatable(tble).__value=-getmetatable(tble).__value return getmetatable(tble).__value end}) end,
  43.     __index={num=function(tble) return tonumber(getmetatable(tble).__value) end},
  44.     })
  45. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement