203 lines
2.8 KiB
Lua
203 lines
2.8 KiB
Lua
#!/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
|