我有时需要获取 F# 中零参数函数的函数本身,而不是值,例如用于记忆。即,我有这个:
let memoize (f: 'a -> 'b) =
let dict = new Dictionary<'a, 'b>()
let memoizedFunc (input: 'a) =
match dict.TryGetValue(input) with
| true, x -> x
| false, _ ->
let answer = f input
dict.Add(input, answer)
answer
memoizedFunc
这完美地工作,但现在我有以下功能:
let private getDataSlowOperation =
// implementation
当我试图记住它时,它给出了类型不匹配(本质上是返回类型getDataSlowOperation
和'a
类型之间的不匹配)。我可以通过如下改变函数来解决这个问题:
let private getDataSlowOperation bogus =
// implementation
现在这可行,但是必须更改函数签名才能使 memoization 工作似乎很奇怪:
let memoGetDataSlowOperation = memoize getDataSlowOperation
我已经尝试过内联fun
声明,但这当然会创建一个新的匿名函数,并且记忆化不适用于它。任何想法如何解决这个问题?我忘记了任何关键字/运算符吗?