面试题答案
一键面试class Memoize
def initialize(&block)
@block = block
@cache = {}
end
def call(*args)
unless @cache.key?(args)
@cache[args] = @block.call(*args)
end
@cache[args]
end
end
# 使用示例
def expensive_computation(a, b)
sleep(2) # 模拟一个耗时的计算
a + b
end
memoized_expensive_computation = Memoize.new { |a, b| expensive_computation(a, b) }
puts memoized_expensive_computation.call(2, 3) # 第一次调用,会执行耗时计算
puts memoized_expensive_computation.call(2, 3) # 第二次调用,直接从缓存返回结果