`
orcl_zhang
  • 浏览: 234536 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Ruby Memoization(转载)

    博客分类:
  • ruby
阅读更多
转载http://fuliang.iteye.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也能带参数了。
rails,已经有现成的activesupport/lib/active_support/memoizable.rb
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics