Skip to content
/ lazybag Public

Lazy values for lazy tables.

License

Notifications You must be signed in to change notification settings

nrk/lazybag

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

Lazy values for lazy tables.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages