memoizer.rb

Path: lib/standard/facets/memoizer.rb
Last Update: Sat Feb 23 07:11:38 +0000 2019

Memoizer wraps objects to provide cached method calls.

  class X
    def initialize ; @tick = 0 ; end
    def tick; @tick + 1; end
    def memo; @memo ||= Memoizer.new(self) ; end
  end

  x = X.new
  x.tick       #=> 1
  x.memo.tick  #=> 2
  x.tick       #=> 3
  x.memo.tick  #=> 2
  x.tick       #=> 4
  x.memo.tick  #=> 2

You can also use to cache collections of objects to gain code speed ups.

  points = points.collect{|point| Memoizer.cache(point)}

After our algorithm has finished using points, we want to get rid of these Memoizer objects. That‘s easy:

   points = points.collect{|point| point.__self__ }

Or if you prefer (it is ever so slightly safer):

   points = points.collect{|point| Memoizer.uncache(point)}

Memoizer is the work of Erik Veenstra

Copyright (c) 2006 Erik Veenstra

See javathink.blogspot.com/2008/09/what-is-memoizer-and-why-should-you.html

[Validate]