In a recent pairing session, a Ruby veteran showed me how to use metaprogramming to abstract a memoizing functionality out of a recursive Fibonacci method. Let's look at how that works. First, we will start with a basic recursive Fibonacci method whose use of memoization depends upon a class variable. class Fib @@memo = { 0 => 0, 1 => 1 } def self.fib_rec(n) @@memo[n] ||= fib_rec(n - 1) + fib_rec(