#!/usr/bin/env lua -- Metatables t = { __add=function(a,b)return a+b end, __sub=function(a,b)return a-b end, __mul=function(a,b)return a*b end, __div=function(a,b)return a/b end, __mod=function(a,b)return a%b end, __pow=function(a,b)return a^b end, __unm=function(a)return -a end, __idiv=function(a,b)return a//b end, __band=function(a,b)return a&b end, __bor=function(a,b)return a|b end, __bxor=function(a,b)return a~b end, __bnot=function(a)return ~a end, __shl=function(a,b)return a<<b end, __shr=function(a,b)return a>>b end, __concat=function(a,b)return a..b end, __len=function(a)return #a end, __eq=function(a,b)return a==b end, __lt=function(a,b)return a<b end, __le=function(a,b)return a<=b end, __index=function(t,k)return t[k] end, __newindex=function(t,k,v)return t[k]=v end, __call=function(f, ...)return f(...) end, __tostring=function(a)return tostring(a) end, __pairs=function(t)return pairs(a) end, -- setmetatable __metatable=true -- Garbage collector __gc=function() end -- Weak table __mode='k' -- or 'v' } a or b a and b a~=b a>=b true or false a or nil a::m a.m a;a -- String '\a' '\b' '\f' '\n' '\r' '\t' '\v' '\\' '\"' '\'' '\z' '\xff' '\xFF' '\231' '\23' '\2' '\u{100201}' -- max 6 digits '\2a\ks' -- error 'multi\ line' 'multi\z line' 'multi\z line\ 2' a = 'alo\n123"' a = "alo\n123\"" a = '\97lo\10\04923"' a = [[alo 123"]] a = [==[ alo 123"]==] -- Decimal 3 345 0xff 0xBEBADA -- Float 3. .3 3.0 3.1416 314.16e-2 314.e+2 0.31416E1 34e1 0.e3 0x0.1E 0xA23p-4 0xA.p+4 0x.ap4 0X1.921FB54442D18P+1 -- error 32p 0xp-4 0x.p-4 3.x -- single comment xyz() --[[ long comment ]] xyz() -- TODO bla bla --[[ TODO bla bla ]] a = { [f(1)] = g; "x", "y"; x = 1, f(x), [30] = 23; 45 } -- is equivalent to do local t = {} t[f(1)] = g t[1] = "x" -- 1st exp t[2] = "y" -- 2nd exp t.x = 1 -- t["x"] = 1 t[3] = f(x) -- 3rd exp t[30] = 23 t[4] = 45 -- 4th exp a = t end 32-0x43+0x2-5 return"a" return'a' return{} f(3) f'a' f"a" f{s=2} f[[s]] f[=[s]=] #a local CONSTANT = a a = {} local x = 20 for i=1,10 do local y = 0 a[i] = function () y=y+1; return x+y end end local function foo() end function obj:foo() print(self:bar()) end function obj.bar(self) print(self) print(self.value) end --! \brief gfind is deprecated string.gfind('s') string.gmatch('f') function foo() if x then function() end bar=function() if y then if z then end end end end end -- attributes local a<const> = 2 local a<const> print(a) local f <close>, const < const > local a <cloe>, b< cons >, c<const, d<close> ; a<b local a <cloe> -- bla, b< cons > local a <close> --[[ b <const>]], b <const> --[[ xyz ]] , c <close> b< cons > --- \code --! a = 3 --! \endcode a = 3