Ruby Memoization

973 단어 cacheRuby
전재 하 다
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/activesupport/memoizable.rb

좋은 웹페이지 즐겨찾기