3.5 MEMOIZE模块
本书不是关于Perl模块的内部细节的,而是关于一些Memoize模块内部使用的并和稍后要做的事情有直接联系的技术,所以现在简短地介绍一下。
Memoize得到一个函数名(或引用)作为它的参数。它制造一个新的函数,后者维护一个缓存并在其中查找它的参数。如果新的函数在缓存里找到了参数,就返回缓存的值;如果没找到,就调用原始函数,把返回的值保存入缓存,并把它返回给原始的主调者。
制造完这个新的函数,Memoize就把它装入Perl的符号表以代替原始的函数,那样当你认为你在调用原始函数的时候,其实你得到了新的带缓存管理的函数。
如果不去探究真实的Memoize模块的内部,即一个350行的怪物,那么将看一个小的、削减过的记忆器。要去除的最重要的东西是处理Perl符号表的代码部分(手动处理)。取而代之的是,我们将有一个memoize函数,它的参数是我们想要使之带记忆的子例程的引用,且它返回一个指向带记忆的版本(即缓存管理函数)的引用:
### Code Library: memoize
sub memoize {
my ($func) = @_;
my