#!/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.
Leave a Reply