魔法函数语法
用魔法函数来增强原有函数的功能。
语法
魔法函数是一种函数,传入的第一个参数是一个函数指针(需要增强的函数),返回的值是匿名函数或函数指针。 例如: 魔法函数memoize可以用来缓存函数调用的结果,代码如下:
function memoize(func);
begin
cache := array();
memoized_func := function (...args) // 匿名函数做闭包
begin
uplevel#1 cache, func; // 用uplevel访问memoize的变量
key := str(args);
if key in cache then
return cache[key]; // 如果已缓存结果,直接返回结果
result := func(...args); // 否则调用函数,缓存结果
cache[key] := result;
return result;
end
return memoized_func; // 返回闭包
end;
使用的时候在函数定义前加魔法函数调用,用@开头,没有参数可以省略()。 系统会自动传入要增强的函数做为第一个参数,所以不需要设置这个参数。 例如,使用memoize来缓存结果:
@memoize
function calc_func(x);
begin
// 例如是很消耗时间的一些计算,这里只是简单的返回+1示例一下:
return x+1;
end;
// 调用函数并缓存结果
x := calc_func(1);
x := calc_func(2);
用例
例如可以用于缓存结果,记录函数调用,调用时检查相关的权限等等,应用非常广泛和方便。