Sha256: ae2faff7753c1f528cf54b09a258a430a3e66737f55cdfce9b157b44c585ef51
Contents?: true
Size: 550 Bytes
Versions: 19
Compression:
Stored size: 550 Bytes
Contents
module Memoize class ArgsError < StandardError; end module ClassMethods 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 end def self.included(base) base.extend(ClassMethods) end end
Version data entries
19 entries across 19 versions & 1 rubygems