Lua journey
it has now occurred to me that using Lua along with Gemini is a great combo
Misc
What i find neat is that functions for each data type are grouped under global "table" of sorts. something akin to static class, providing static methods in traditional OOP languages.
Libraries
Making a library and including it is as easy as it is in Python, you just return the library table and then require the filename.
When defining a non-local table inside a library, it is imported into global namespace.
Consider the following snippet inside foo.lua file:
bar = {}
local baz = {}
FOO = {
bar = bar
baz = baz,
}
return FOO
Later, when importing FOO
local FOO = import("foo")
FOO.bar -- table: 0x...
bar -- table: 0x...
FOO.baz -- table: 0x...
baz -- nil
Thus the internal tables/variables of a libary can be made private or public to a global namespace
Multiple return
Lua has multiple return values and destructuring syntax (similiar to the one found in Goland and JS):
function square(a)
return 4*a, a*a
end
local circum, area = square(3) --> 12, 9
Global table
Apparently you can alias stuff in lua just like that:
_G.echo = _G.print
echo "foo" -- will print "foo"
A peek inside the table
There is no way to check if an element is inside the table, so just for convenience i'll put this here
function table.has(t, v)
for _, e in pairs(t) do
if e == v then
return true
end
end
return false
end
function table.hask(t, k)
for i in pairs(t) do
if i == k then
return true
end
end
return false
end
local tab = {1, 2, 3, ["x"] = "foo"}
table.has(tab, 1) --> true
table.hask(tab, "x") --> true
table.hask(tab, 4) --> false
Templates
I kinda missed the templates from Golang, so here's something really darn simple:
function render(str, t)
str = string.gsub(str, "%(%( .(%w+) %)%)", function (a)
if t[a] ~= nil then
return t[a]
end
return ""
end)
return str
end
local s = "Hello (( .name ))"
render(s, { name = "Fred", age = 21 }) --> "Hello Fred"