【发布时间】:2012-12-08 15:02:48
【问题描述】:
如何编写具有这种形式的函数:
A(key, B(key, C(key, ValFactory(key))))
其中 A、B 和 C 具有此签名:
TResult GetOrAdd(string key, Func<string, TResult> generator);
而且 Valfactory 有签名:
TResult Get(string key);
“链式”函数的数量没有限制,所以它可以是 A、B 或 A、B、C 或 A、B、C、D、E 等。
我将函数 A、B、C 等存储在 LinkedList 中
如何以我想要的方式称呼它们?
编辑添加一些信息以进行澄清:
我需要这个来实现多级缓存。有几个不同的缓存都实现了“GetOrAdd”功能。一级缓存只是一个 ConcurrentDictionary 已经有 GetOrAdd 函数。
缓存的工作方式是,如果一级缓存没有特定键的条目,它会尝试在二级缓存中查找。二级缓存在未命中等情况下查找三级缓存。
没有缓存应该知道另一个缓存,它应该只实现签名TResult GetOrAdd(string, Func<string, TResult> functionToCallOnCacheMiss)
【问题讨论】:
-
你绝对应该展示一些代码。否则它的读心术。
标签: c# function recursion functional-programming