D 是否可以使用用户定义的属性在运行时获取值?
我真正想做的是缓存/记忆某些函数参数和结果。我知道在d中有用户定义的属性,但似乎无法使用它获取运行时值。我弄错了吗?有没有其他类似的设计模式,我可以在这里得到类似的结果D 是否可以使用用户定义的属性在运行时获取值?,d,D,我真正想做的是缓存/记忆某些函数参数和结果。我知道在d中有用户定义的属性,但似乎无法使用它获取运行时值。我弄错了吗?有没有其他类似的设计模式,我可以在这里得到类似的结果 @memoize("expensiveCalc") int expensiveCalc(string foo){ ///bar } 所以memoize实际上是一个被调用的函数。但是,它利用我的参数值快速散列参数并调用实际函数。 与此类似: def memoize(iden, time = 0, stale=False,
@memoize("expensiveCalc")
int expensiveCalc(string foo){
///bar
}
所以memoize实际上是一个被调用的函数。但是,它利用我的参数值快速散列参数并调用实际函数。与此类似:
def memoize(iden, time = 0, stale=False, timeout=30):
def memoize_fn(fn):
def new_fn(*a, **kw):
#if the keyword param _update == True, the cache will be
#overwritten no matter what
update = kw.pop('_update', False)
key = make_key(iden, *a, **kw)
res = None if update else memoizecache.get(key)
if res is None:
# okay now go and actually calculate it
res = fn(*a, **kw)
memoizecache.set(key, res, time=time)
return res
new_fn.memoized_fn = fn
return new_fn
return memoize_fn
对于您试图做的事情,您将需要一个包装器模板,而不是UDA。火卫一实际上有一个用于记忆:
D中的uda用于向函数(或其他符号、类型和变量)添加信息,但它们实际上并不修改它。模式是让其他一些代码通过反射读取所有名称,查看UDA,并以这种方式生成新代码。如果要从UDA获取运行时值,可以编写一个函数,使用编译时反射读取该值,然后返回该值。在运行时调用该函数将提供UDA。如果你想知道更多,我可以写下来,但我认为std.functional.memoize可以满足你的需要。请记住,D中的UDA添加信息,它们不会更改或创建代码。如果您只想记忆,则可以在
std.functional
模块中找到它。我正在学习D,它只是越来越好:D