String Interpolation for Lua (Mudlet)
Ok, so this is super handy. It works like python's print(f"{a} {b}"), but it isn't python. I didn't write a majority of this. Most of it was found on a site you can reach by googling lua string interpolation, but it was written for Lua 5.2, not 5.1 so this is my fix -- tested and working well:
</code><code><span>--EXAMPLE USE NOTE:</span>
--Make an alias and do something like:
--local a = 150
--print(f"I want to punch {target} in the face {a} times.")
--Or: local t = { str = "I want to punch {target} in the face {a} times." }
--print(f(t.str))
<span>function f(str)</span>
local load = load
if _VERSION == "Lua 5.1" then
load = <span>function(code, name, _, env)</span>
local fn, err = loadstring(code, name)
if fn then
return fn
else
return nil, err
end
end
end
local outer_env = _ENV
return (str:gsub("%b{}", <span>function(block)</span>
local code = block:match("{(.*)}")
local exp_env = {}
setmetatable(exp_env, { __index = <span>function(_, k)</span>
local stack_level = 5
while debug.getinfo(stack_level, "") ~= nil do
local i = 1
repeat
local name, value = debug.getlocal(stack_level, i)
if name == k then
return value
end
i = i + 1
until name == nil
stack_level = stack_level + 1
end
return rawget(outer_env, k)
end })
local fn, err = load("return "..code, "expression `"..code.."`", "t", exp_env)
if fn then
return tostring(fn())
else
error(err, 0)
end
end))
<span>end</span>2
