Рубин: как украсить метод с запоминанием? - PullRequest
4 голосов
/ 15 июля 2010

Предположим, у меня есть класс в 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

И написал тест, который вызывает метод с теми же аргументами, чтобы увидеть, что выводится get ... и, конечно, метод не запоминается.Как правильно это сделать?

Ответы [ 2 ]

8 голосов
/ 15 июля 2010

memoize :method внутри тела класса, запоминает метод Test.method. Однако вы хотите запомнить метод экземпляра Test#method. Для этого используйте memoize :method внутри Test метода инициализации. (Убедитесь, что вы включили модуль Memoize в Test первым).

0 голосов
/ 15 июля 2010

Есть экран мета-программирования с несколькими примерами для запоминания:

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

...