def memoizeSquares
map = {}
Proc.new {
|numberToSquare|
if (map[numberToSquare])
puts 'Fetching from cache...'
numberToSquare * numberToSquare
else
puts 'Calculating result...'
result = numberToSquare * numberToSquare
map[numberToSquare] = result
result
end
}
end
squares = memoizeSquares
puts squares.call 8
puts squares.call 8
puts squares.call 9
puts squares.call 10
puts squares.call 10