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)}
def self; @self; end
# File lib/more/facets/memoizer.rb, line 55
55: def self.cache(object)
56: new(object)
57: end
# File lib/more/facets/memoizer.rb, line 46
46: def __self__ ; @self ; end
Not thread-safe! Speed is important in caches... ;]
# File lib/more/facets/memoizer.rb, line 49
49: def method_missing(method_name, *args, &block)
50: @cache[[method_name, args, block]] ||= @self.__send__(method_name, *args, &block)
51: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.