Ruby:如何使用memoization来装饰方法?

时间:2010-07-14 20:02:10

标签: ruby memoization

假设我在Ruby中有一个类:

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

  memoize :method
end

我想记住它的结果。因此,出于调试目的,我修改了这样的类:

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

并编写了一个测试方法,该方法使用相同的args调用该方法,以查看输出的内容...以及该方法未被记忆。这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:8)

在类体内

memoize :method,记住方法Test.method。但是,您想要记住实例方法Test#method。为此,请在memoize :method的初始化方法中使用Test。 (确保先将Memoize模块包含在Test中。

答案 1 :(得分:0)

有关于元编程的截屏视频,其中有几个用于记忆的例子:

http://www.pragprog.com/screencasts/v-dtrubyom/the-ruby-object-model-and-metaprogramming(第5集:九个例子)

代码:

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