function T(t)
return setmetatable(t, {__index = table})
end
local function lambda(query)
return assert(loadstring("return function (x) return " .. query .. " end"))()
end
function table.where(tbl, query)
query = lambda(query)
local _new = T{}
for _it, a in pairs(tbl) do
if query(a) then
_new:insert(a)
end
end
return _new
end
function table.print(tbl)
print(tbl)
for _it, a in pairs(tbl) do
print(a)
end
end
a = T{ 1, 2, 3, "asd" }
a:insert('seven')
a:print()
a:where('type(x) == "number"')
:where('x > 1')
:where('x ~= 3')
:print()