我正在为 Groovy 语言编写一些培训材料,并且正在准备一个解释闭包的示例。该示例是“昂贵”方法的简单缓存闭包,withCache
def expensiveMethod( Long a ) {
withCache (a) {
sleep(rnd())
a*5
}
}
所以,现在我的问题是:以下两种实现中的哪一种是 Groovy 中最快且更惯用的?
def withCache = {key, Closure operation ->
if (!cacheMap.containsKey(key)) {
cacheMap.put(key, operation())
}
cacheMap.get(key)
}
或者
def withCache = {key, Closure operation ->
def cached = cacheMap.get(key)
if (cached) return cached
def res = operation()
cacheMap.put(key, res)
res
}
我更喜欢第一个示例,因为它不使用任何变量,但我想知道访问 的get
方法Map
是否比返回包含计算结果的变量慢。
显然答案是“这取决于大小Map
”,但出于好奇,我想听听社区的意见。
谢谢!