dahpgjgamgan
dahpgjgamgan

Reputation: 3007

Ruby: how to decorate a method with memoization?

Suppose I have a class in Ruby:

class Test
  def method(arg1, arg2)
    return arg1+arg2
  end

  memoize :method
end

And I want to memoize its results. So for debug purposes I modified the class like this:

class Test
  def method(arg1, arg2)
    puts 'sth to make sure the method was executed'
    return arg1+arg2
  end
  ...
end

And wrote a test that calls the method with same args, to see what get's outputted... and well the method is not memoized. What's the correct way to do this?

Upvotes: 4

Views: 1196

Answers (2)

sepp2k
sepp2k

Reputation: 370202

memoize :method inside the class body, memoizes the method Test.method. However you want to memoize the instance method Test#method. To do this use memoize :method inside Test's initialize method. (Make sure you include the Memoize module into Test first).

Upvotes: 8

Leventix
Leventix

Reputation: 3859

There's a screencast on metaprogramming with several examples for memoization:

http://www.pragprog.com/screencasts/v-dtrubyom/the-ruby-object-model-and-metaprogramming (Episode 5: Nine Examples)

Code:

http://media.pragprog.com/screencasts/v-dtrubyom/code/v-dtrubyom-v-05-code.tgz

Upvotes: 0

Related Questions