module Memoize::ClassMethods

Public Instance Methods

memoize(name) click to toggle source
Calls superclass method
# File lib/memoize.rb, line 6
def memoize(name)
  ivar = :"@#{name.to_s.sub('?', '_predicate')}"
  prepend Module.new {
    define_method(name) do |*args|
      raise ArgsError.new('cannot pass arguments to memoized method %p' % name) unless args.empty?
      return instance_variable_get(ivar) if instance_variable_defined?(ivar)
      instance_variable_set(ivar, super())
    end
  }
end