All Projects → JuliaCollections → Memoize.jl

JuliaCollections / Memoize.jl

Licence: other
@memoize macro for Julia

Programming Languages

julia
2034 projects

Memoize.jl

Build Status Coverage Status

Easy memoization for Julia.

Usage

using Memoize
@memoize function x(a)
    println("Running")
    2a
end
julia> x(1)
Running
2

julia> memoize_cache(x)
IdDict{Any,Any} with 1 entry:
  (1,) => 2

julia> x(1)
2

julia> empty!(memoize_cache(x))
IdDict{Any,Any}()

julia> x(1)
Running
2

julia> x(1)
2

By default, Memoize.jl uses an IdDict as a cache, but it's also possible to specify the type of the cache. If you want to cache vectors based on the values they contain, you probably want this:

using Memoize
@memoize Dict function x(a)
    println("Running")
    a
end

You can also specify the full function call for constructing the dictionary. For example, to use LRUCache.jl:

using Memoize
using LRUCache
@memoize LRU{Tuple{Any,Any},Any}(maxsize=2) function x(a, b)
    println("Running")
    a + b
end
julia> x(1,2)
Running
3

julia> x(1,2)
3

julia> x(2,2)
Running
4

julia> x(2,3)
Running
5

julia> x(1,2)
Running
3

julia> x(2,3)
5

Notes

Note that the @memoize macro treats the type argument differently depending on its syntactical form: in the expression

@memoize CacheType function x(a, b)
    # ...
end

the expression CacheType must be either a non-function-call that evaluates to a type, or a function call that evaluates to an instance of the desired cache type. Either way, the methods Base.get! and Base.empty! must be defined for the supplied cache type.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].