Giter VIP home page Giter VIP logo

lazybag's Introduction

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

lazybag's People

Contributors

nrk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.