2010-07-14 8 views
4

Supposons que j'ai une classe Ruby:Ruby: comment décorer une méthode avec mémo?

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

    memoize :method 
end 

Et je veux memoize ses résultats. Donc, à des fins de débogage j'ai modifié la classe comme ceci:

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

Et écrit un test qui appelle la méthode avec les mêmes arguments, pour voir ce que get ... et bien sorti de la méthode n'est pas memoized. Quelle est la bonne façon de faire cela?

+0

Qu'est-ce qui définit la méthode 'memoize'? – Adrian

+1

standard memoize gem – dahpgjgamgan

+0

+1 ne connaissait pas cette gemme avant! –

Répondre

8

memoize :method à l'intérieur du corps de la classe, memoizes la méthode Test.method. Cependant, vous souhaitez mémoriser la méthode d'instance Test#method. Pour ce faire, utilisez memoize :method à l'intérieur de la méthode d'initialisation Test. (Assurez-vous d'inclure le module Memoize dans Test d'abord).

0

Il y a un screencast sur metaprogramming avec plusieurs exemples pour memoization:

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

code:

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

+0

Il ne demande pas comment écrire une méthode memoize. Il demande comment utiliser la méthode memoize à partir de la gemme memoize, ou plus précisément pourquoi sa tentative d'utiliser cette méthode n'a pas réussi. – sepp2k