Cache
Allows you to cache call results that are solely determined by arguments.
require 'dry/core/cache'
class Foo
extend Dry::Core::Cache
attr_reader :source
def initialize(source)
@source = source
end
def heavy_computation(arg1, arg2)
fetch_or_store(source, arg1, arg2) { source ^ arg1 ^ arg2 }
end
end
Note
Beware Proc instance hashes are not equal, i.e. -> { 1 }.hash != -> { 1 }.hash
.
This means you shouldn't pass Procs in args unless you're sure they are always the same instances, otherwise you introduce a memory leak