Skip to content

Latest commit

 

History

History
52 lines (36 loc) · 1.34 KB

README.md

File metadata and controls

52 lines (36 loc) · 1.34 KB

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