/lazybag

Lazy values for lazy tables.

Primary LanguageLuaMIT LicenseMIT

Lazybag

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.

Compatibility

This library is tested and works with Lua 5.1, Lua 5.2 and LuaJit 2.0.

Example

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.
]]

Tests

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.

Author

License

The code for Lazybag is distributed under the terms of the MIT license (see LICENSE).