Module: Axn::Internal::Memoization
- Defined in:
- lib/axn/internal/memoization.rb
Constant Summary collapse
- UNSET =
Object.new.freeze
Class Method Summary collapse
Class Method Details
.define_memoized_reader_method(target, field, &block) ⇒ Object
8 9 10 11 12 13 14 15 16 17 |
# File 'lib/axn/internal/memoization.rb', line 8 def self.define_memoized_reader_method(target, field, &block) target.define_method(field) do ivar = :"@_memoized_reader_#{field}" cached_val = instance_variable_defined?(ivar) ? instance_variable_get(ivar) : UNSET return cached_val unless cached_val == UNSET value = instance_exec(&block) instance_variable_set(ivar, value) end end |