转载http://fuliang.javaeye.com/blog/827321
module Memoizable
def memoize( name, cache = Hash.new )
original = "__unmemoized_#{name}__"
([Class, Module].include?(self.class) ? self : self.class).class_eval do
alias_method original, name
private
original
define_method(name) { |*args| cache.has_key?(args) ? cache[args] : cache[args] ||= send(original, *args) }
end
end
end
include Memoizable
def fib(n)
return n if (0..1).include? n
fib(n-1) + fib(n-2)
end
memoize :fib
根据不同参数来做一个hash
缓存方法结果,这样不但可以缓存false,nil也能带参数了。