# Ruby Idiom for dynamic programming? (request for comments)

**URL:** <https://www.ruby-forum.com/t/ruby-idiom-for-dynamic-programming-request-for-comments/141984>\
**Category:** Ruby\
**Created:** [July 2, 2008, 12:35pm UTC](https://www.ruby-forum.com/t/ruby-idiom-for-dynamic-programming-request-for-comments/141984 "2008-07-02T12:35:53Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![larsch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/ad7895/32.png) [@larsch](https://www.ruby-forum.com/u/larsch)\
**Post date:** [July 2, 2008, 12:35pm UTC](https://www.ruby-forum.com/t/ruby-idiom-for-dynamic-programming-request-for-comments/141984/1 "2008-07-02T12:35:53Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![larsch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/ad7895/32.png) [@larsch](https://www.ruby-forum.com/u/larsch)\
**Post date:** [July 2, 2008, 1:52pm UTC](https://www.ruby-forum.com/t/ruby-idiom-for-dynamic-programming-request-for-comments/141984/2 "2008-07-02T13:52:45Z")

</div>

@@ffunccache is a class variable, not an object variable.  
It is shared amongst all instance sof the class Module.

RF

---

<div class="post-metadata">

**Author:** ![larsch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/ad7895/32.png) [@larsch](https://www.ruby-forum.com/u/larsch)\
**Post date:** [July 2, 2008, 2:07pm UTC](https://www.ruby-forum.com/t/ruby-idiom-for-dynamic-programming-request-for-comments/141984/3 "2008-07-02T14:07:11Z")

</div>

On Wed, Jul 2, 2008 at 7:42 AM, Ron F. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> @@ffunccache is a class variable, not an object variable.  
> It is shared amongst all instance sof the class Module.

And, since Class is a subclass of Module, ALL classes.

–  
Rick DeNatale

My blog on Ruby  
[http://talklikeaduck.denhaven2.com/](http://talklikeaduck.denhaven2.com/)

---

<div class="post-metadata">

**Author:** ![larsch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/ad7895/32.png) [@larsch](https://www.ruby-forum.com/u/larsch)\
**Post date:** [July 2, 2008, 2:07pm UTC](https://www.ruby-forum.com/t/ruby-idiom-for-dynamic-programming-request-for-comments/141984/4 "2008-07-02T14:07:11Z")

</div>

2008/7/2 Lars C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> 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:

There is memoize already…

Kind regards

robert
