# File lib/more/facets/memoizable.rb, line 60
  def memoize(*method_names)
    options = Hash === method_names.last ? method_names.pop : {}

    options[:arguments] = true if options[:arguments].nil?  # default to true

    ref = options[:class]     ? 'self.class.name'       : 'self'
    frz = options[:freeze]    ? '.freeze'               : ''
    arg = options[:arguments] ? '[__a__, block_given?]' : 'nil'

    code = ""
    method_names.each do |m|
      code << "alias_method '\#{ m }:memo', '\#{ m }'\nprivate '\#{ m }:memo'\ndef \#{ m }(*__a__,&__b__)\nc = Memoizable.cache[\#{ref}][:'\#{ m }']\nk = \#{arg}\nif c.has_key?(k)\nc[k]\nelse\nc[k] = __send__('\#{ m }:memo',*__a__,&__b__)\#{frz}\nend\nend\n"
    end
    module_eval(code)
  end