From: Ron Fox Date: 2008-07-02T20:42:03+09:00 Subject: Re: Ruby Idiom for dynamic programming? (request for comments) @@ffunccache is a class variable, not an object variable. It is shared amongst all instance sof the class Module. RF Lars Christensen wrote: > Random idea i had... > > I sometimes make custom classes/method for caching output of > functions, i.e. for dynamic programming. To generalise this, i though > it would be possible to implement it like this: > > class A > def func(a, b, *c) > puts "Computing... #{[a,b,c].inspect}" > return [a,b,c].hash > end > cached :func > end > > My 'cached' directive is defined as: > > class Module > def cached(method, cache = (@@funccache ||= {})) > orig = "uncached_#{method}" > alias_method orig, method > define_method method do |*args| > key = [ method, args ] > @@funccache[key] ||= send(orig, *args) > end > end > end > > What's the scope of @@funccache? (What 'object' holds it?). Is there a > better way to do it? > > Lars -- Ron Fox NSCL Michigan State University East Lansing, MI 48824-1321