module Hamster::Immutable::ClassMethods
def memoize(*names)
def memoize(*names) include MemoizeMethods unless include?(MemoizeMethods) names.each do |name| original_method = "__hamster_immutable_#{name}__" alias_method original_method, name class_eval <<-METHOD, __FILE__, __LINE__ def #{name} if @__hamster_immutable_memory__.instance_variable_defined?(:@#{name}) @__hamster_immutable_memory__.instance_variable_get(:@#{name}) else @__hamster_immutable_memory__.instance_variable_set(:@#{name}, #{original_method}) end end METHOD end end