【问题标题】:Ruby: how to decorate a method with memoization?Ruby:如何用 memoization 装饰方法?
【发布时间】:2011-03-16 01:35:31
【问题描述】:

假设我有一个 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

并编写了一个测试,该测试使用相同的参数调用该方法,以查看输出了什么......并且该方法没有被记忆。这样做的正确方法是什么?

【问题讨论】:

  • memoize 方法的定义是什么?
  • +1 以前不知道这个宝石!
  • 您可能希望避免使用Test 作为类名,以防您以后希望使用测试/单元。
  • 这不是我真正测试的代码,但无论如何感谢您的建议。

标签: ruby memoization


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    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

    【讨论】:

    • 他不是在问如何编写 memoize 方法。他在问如何使用 memoize gem 中的 memoize 方法,或者更具体地说,为什么他尝试使用该方法没有成功。
    猜你喜欢
    • 2019-02-03
    • 2017-01-04
    • 2020-01-11
    • 2011-02-02
    相关资源
    最近更新 更多