我正在用F#构建缓存系统。我想要做的一件事是在程序运行时间内跟踪总缓存命中和缓存未命中。所以,例如我可能有这样的函数:
member this.Exists key =
match HttpRuntime.Cache.Get(key) with
| null -> false
| result -> true
在真空的情况下,我想增加一个未命中计数器,在假的情况下,我想增加一个命中计数器。现在我可以使用一个可变变量并且这样做没有问题,但是我想知道如何使用纯函数方法或更惯用的F#方法来实现这个目标,最终目标是能够显示当前的缓存计数在程序运行时命中和错过用户。
答案 0 :(得分:3)
我也不会过分担心性能计算是纯粹的。根据定义,它是一种副作用,因此为它保留一些可变状态是有意义的。
例如,您可以将static
(或不是static
)成员添加到您的班级,然后改变它:
type Cache() =
static let mutable missCounter = 0
static let mutable hitCounter = 0
member this.Exists key =
match HttpRuntime.Cache.Get(key) with
| null -> missCounter <- missCounter + 1; false
| result -> hitCounter <- hitCounter + 1; true