Class: Module
- Defined in:
- lib/lab42/core/fn.rb,
lib/lab42/core/memoization.rb
Overview
module Lab42::Memoizer
Instance Method Summary collapse
Instance Method Details
#fm ⇒ Object
10 11 12 |
# File 'lib/lab42/core/fn.rb', line 10 def fm Lab42::Behavior::Proxy.new self, fm: true end |
#lazy_attr(sym, &blk) ⇒ Object
21 22 23 24 |
# File 'lib/lab42/core/memoization.rb', line 21 def lazy_attr sym, &blk raise ArgumentError, 'missing initialization block' unless blk memo sym, &blk end |
#memo(*args, &blk) ⇒ Object
44 45 46 47 |
# File 'lib/lab42/core/memoization.rb', line 44 def memo *args, &blk define_method *args, &blk memoize args.first end |
#memoize(sym) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/lab42/core/memoization.rb', line 26 def memoize sym orig_method = instance_method sym ivar_name = Lab42::Memoizer.make_ivar_name sym define_method sym do |*args| instance_variable_set ivar_name, {} unless instance_variable_defined? ivar_name instance_variable_get( ivar_name ).fetch! args do # Not cached yet, caching by means of fetch! orig_method.bind( self ).( *args ) end end define_method "unmemoize_memo_#{sym}" do | *args | return instance_variable_set ivar_name, {} if args.empty? instance_variable_get( ivar_name ).delete args end end |