Ruby Memoization(转载)_Ruby_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > Ruby > Ruby Memoization(转载)

Ruby Memoization(转载)

 2010/12/5 13:14:33  orcl_zhang  http://orcl-zhang.javaeye.com  我要评论(0)
  • 摘要:转载http://fuliang.javaeye.com/blog/827321moduleMemoizabledefmemoize(name,cache=Hash.new)original="__unmemoized_#{name}__"([Class,Module].include?(self.class)?self:self.class).class_evaldoalias_methodoriginal,nameprivateoriginaldefine_method(name){
  • 标签:Ruby Memoization
转载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也能带参数了。
发表评论
用户名: 匿名