    # File lib/supplemental/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