原文
我想用类型系统(客户端和服务器代码)来建立REST接口.

struct Request
{
    Method method;
    string url;
    int apiLevel;
}

@Request(Method.GET, "/my-resource/%s", 1)
struct MyResourceGet
{
    @Param
    string name;

    // 其他成员...
}

string requestUrl(ReqT)(ReqT req) if (isRequest!ReqT)
{
    import std.format : format;
    import std.traits : getSymbolsByUDA;

    Request reqAttr = RequestAttr!ReqT;

    alias paramSymbols = getSymbolsByUDA!(ReqT, Param);
    // return format(reqAttr.url, ????);
}

unittest
{
    MyResourceGet req;
    req.name = "thisone";
    assert(requestUrl(req) == "/my-resource/thisone");
}

requestUrl函数中,如何从paramsSymbolsreq中取req.name的值?
这样用

getUDAs!(req, Param).length == 0

吗?但仅对而非字段属性.

从符号取,要用递归.即必须先查找UDA,然后使用getUDA.

我不需要uda值,只需要用uda装饰字段的值.
我用

__traits(getMember, req, paramSymbols[0].stringof)

得到了.

stringof仅用于调试,因为可能不一致,你可以用__traits(identifier).