How to iterate getSymbolsByUDA

Steven Schveighoffer schveiguy at gmail.com
Wed Nov 28 15:38:30 UTC 2018


On 11/28/18 2:18 AM, Eko Wahyudin wrote:
> static foreach(sym; getSymbolsByUDA!(A, Attr)){
>     writeln(sym.stringof); // print variable name "a" this what i want
> }
> 
> foreach(sym; getSymbolsByUDA!(A, Attr)){
>     writeln(sym.stringof);              // print "sym"
> }
> 
> foreach(sym; getSymbolsByUDA!(A, Attr)){
>     writeln(__traits(identifier, sym)); //also print "sym"
> }
> 
> is there a way to get variable name using foreach like static foreach?

Generally, foreach establishes a variable for the item, whereas static 
foreach does not.

Note: I can't even get this to work, even in old versions of dmd. I get 
the Error: need `this` for `a` of type `int`

But if you can get it to work, you may have luck with:

alias symbols = getSymbolsByUDA!(A, Attr);

foreach(i, _; symbols)
{
    writeln(symbols[i].stringof);
    // or
    writeln(__traits(identifier, symbols[i]));
}

Which is an old workaround for how foreach on tuples used to work.

-Steve


More information about the Digitalmars-d-learn mailing list