Lazybag is a tiny Lua library loosely inspired by Pimple that can be leveraged to create table objects with fields that are lazily initialized upon first access using functions that act as value initializers.
This library is tested and works with Lua 5.1, Lua 5.2 and LuaJit 2.0.
local container = require('lazybag').new()
-- plain field with a table value
container.metavars = { 'foo', 'bar' }
-- plain field with a function value
container.fn = function(t, foo, bar)
return 'Foo is '..foo..' and bar is '..bar..'.'
end
-- defines a 'iamlazy' field whose value is initialized upon first access
container:lazy('iamlazy', function(t)
print('You will see me only once!')
return t:fn(unpack(t.metavars))
end)
print(container.iamlazy)
print(container.iamlazy)
--[[
You will see me only once!
Foo is foo and bar is bar.
Foo is foo and bar is bar.
]]
Lazybag uses Telescope for its tests. You can launch the whole test
suite from the root of the repository with tsc -f tests/lazybag.lua
.
The code for Lazybag is distributed under the terms of the MIT license (see LICENSE).