From 61e48c12006ea9fa61c6a132a484ba57eb59e3ae Mon Sep 17 00:00:00 2001 From: John Carney Date: Thu, 16 Jul 2015 23:33:09 +1000 Subject: [PATCH 1/2] Further improvement to class version of `memoize`. --- lib/memonic.rb | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/lib/memonic.rb b/lib/memonic.rb index 04e9523..5407beb 100644 --- a/lib/memonic.rb +++ b/lib/memonic.rb @@ -19,18 +19,10 @@ def memoize(variable, &block) module ClassMethods def memoize(name, &block) - define_method("__#{name}__", &block) - class_eval <<-RUBY - def #{name} - @#{name} || begin - if defined?(@#{name}) - @#{name} - else - @#{name} = __#{name}__ - end - end - end - RUBY + define_method(name) do + singleton_class.class_eval { attr_reader name } + instance_variable_set("@#{name}", instance_exec(&block)) + end end end end From e924fa2f19b9b487cde483dda882b09153cec3b7 Mon Sep 17 00:00:00 2001 From: John Carney Date: Tue, 21 Jul 2015 16:12:46 +1000 Subject: [PATCH 2/2] Tweaked the class version of memoize. --- lib/memonic.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/memonic.rb b/lib/memonic.rb index 5407beb..7057fce 100644 --- a/lib/memonic.rb +++ b/lib/memonic.rb @@ -20,7 +20,7 @@ def memoize(variable, &block) module ClassMethods def memoize(name, &block) define_method(name) do - singleton_class.class_eval { attr_reader name } + singleton_class.send(:attr_reader, name.to_sym) instance_variable_set("@#{name}", instance_exec(&block)) end end