what happens on a block not given + miss ? since you are cacheing nil, returning nil is probably not the best, if this absolutely needs a block maybe wise to raise an ArgError, or just not check for block given and let ruby yell at the user.