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

D 是否可以使用用户定义的属性在运行时获取值?,d,D,我真正想做的是缓存/记忆某些函数参数和结果。我知道在d中有用户定义的属性,但似乎无法使用它获取运行时值。我弄错了吗?有没有其他类似的设计模式,我可以在这里得到类似的结果 @memoize("expensiveCalc") int expensiveCalc(string foo){ ///bar } 所以memoize实际上是一个被调用的函数。但是,它利用我的参数值快速散列参数并调用实际函数。 与此类似: def memoize(iden, time = 0, stale=False,

我真正想做的是缓存/记忆某些函数参数和结果。我知道在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。火卫一实际上有一个用于记忆:


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

如果您只想记忆,则可以在
std.functional
模块中找到它。我正在学习D,它只是越来越好:D