gpt4 book ai didi

d - 是否可以使用用户定义的属性在运行时获取值?

转载 作者:行者123 更新时间:2023-12-04 11:34:29 26 4
gpt4 key购买 nike

我真正想做的是缓存/内存某些函数参数和结果。我知道 d 中有用户定义的属性,但似乎无法通过它获取运行时值。我错了吗?我可以在这里使用另一种类似的设计模式来获得类似的结果吗?

@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。 Phobos 实际上有一个用于内存:http://dlang.org/phobos/std_functional.html#memoize

D 中的 UDA 用于向函数(或其他符号、类型和变量)添加信息,但它们实际上并不修改它。该模式是让一些其他代码通过反射读取所有名称,查看 UDA,然后以这种方式生成新代码。如果您想从 UDA 获取运行时值,您需要编写一个函数,使用编译时反射读取它,然后返回该值。在运行时调用该函数会在那里提供 UDA。如果你想了解更多,我可以写下来,但我认为 std.functional.memoize 会在这里做你想做的。请记住,D 中的 UDA 添加信息,它们不会更改或创建代码。

关于d - 是否可以使用用户定义的属性在运行时获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20382428/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com