Caching for complex computation in Ruby

Tags:

#!/usr/local/bin/ruby -w

class Util
def compute
puts “Complex computation”
12345
end

class << self def once(*ids) for id in ids module_eval %{ alias_method :__#{id.to_i}__, :#{id.to_s} private :__#{id.to_i}__ def #{id.to_s}(*args, &block) (@__#{id.to_i}__ ||= __#{id.to_i}__(*args, &block)) end } end end end once :compute end u = Util.new puts u.compute puts u.compute [/code] After PickAxe II.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *