4

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

そして、同じ引数でメソッドを呼び出すテストを作成して、何が出力されるかを確認しました...そして、メソッドはメモ化されていません。これを行う正しい方法は何ですか?

4

2 に答える 2

8

memoize :methodクラス本体内で、メソッドを記憶しTest.methodます。ただし、インスタンスメソッドをメモ化する必要がありますTest#method。これを行うには、memoize :methodinsideTestのinitializeメソッドを使用します。Memoize(モジュールをTest最初に含めるようにしてください)。

于 2010-07-14T20:15:55.503 に答える
0

メタプログラミングに関するスクリーンキャストがあり、メモ化の例がいくつかあります。

http://www.pragprog.com/screencasts/v-dtrubyom/the-ruby-object-model-and-metaprogramming(エピソード5:9つの例)

コード:

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

于 2010-07-14T20:15:31.090 に答える