对于方法,其中...哪些语言支持没有样板代码的返回值缓存?
- 存在的输入和输出之间的静态一个一对一映射,
- 创建输出对象的成本是比较高的,并且
- 该方法被重复调用相同的输入
...需要缓存结果值。
在我的代码下面的结果值缓存模式被重复了很多(在Java中的伪代码,但问题是语言无关):
private static Map<Input, Output> fooResultMap = new HashMap<Input, Output>();
public getFoo(Input input) {
if (fooResultMap.get(input) != null) {
return fooResultMap.get(input);
}
Output output = null;
// Some code to obtain the object since we don't have it in the cache.
fooResultMap.put(input, output);
return output;
}
重复这一结构中的所有时间明显违反干的原则。
理想情况下,我想上面的代码将减少到以下几点:
@CacheResult
public getFoo(Input input) {
Output output = null;
// Some code to obtain the object since we don't have it in the cache.
return output;
}
凡理论CacheResult注释将采取目前,我正在做手工缓存的照顾。
这种类型的缓存的总称是“memoization”。
我正在寻找的确切功能的一个很好的例子是Perl core module "Memoize"。
在哪种语言中存在这种类似Memoize的缓存解决方案(在语言级别还是库级别)?特别是 - 这种解决方案是否存在于任何主流平台,例如Java或.NET?
(注意,所示代码泄漏,而不是线程安全的) – 2009-05-21 11:14:00
这是运行Web上下文,你每次都必须从数据库中获得Foo的价值? – 2009-05-21 11:22:11
@克里斯:不,问题是上下文无关的。 – knorv 2009-05-21 11:27:51