def memoize(*symbols)
symbols.each do |symbol|
original_method = "_unmemoized_#{symbol}"
memoized_ivar = MEMOIZED_IVAR.call(symbol)
class_eval "raise \"Already memoized \#{symbol}\" if method_defined?(:\#{original_method})\nalias \#{original_method} \#{symbol}\n\ndef \#{symbol}(*args)\n@_memoized_ivars ||= {}\n@_memoized_ivars[:\#{memoized_ivar}] ||= {}\n\nkey = args.hash\n\nret = @_memoized_ivars[:\#{memoized_ivar}][key]\n\nif ret\nret\nelse\n@_memoized_ivars[:\#{memoized_ivar}][key] = \#{original_method}(*args).freeze\nend\nend\n\n", __FILE__, __LINE__
end
end