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