How to mixin finction name?

Adam D. Ruppe destructionator at gmail.com
Sun Apr 14 17:40:38 UTC 2019


On Sunday, 14 April 2019 at 17:33:51 UTC, Adam D. Ruppe wrote:
> That will expand to:

I'm sorry, I skipped a step here. The compiler doesn't look into 
the mixin string until after it calls mixin, so technically it 
goes:

static foreach ->
   mixin("void print" ~ 'A' ~ "(int a) {
        writeln(ch, " - ", a);
   }

And then, from there, mixin parses it and links in as if you 
wrote:

void printA(int a) {
    writeln(ch, " - ", a);
}

and then, since it is still in static foreach, the compiler will 
do another layer of transforming that `ch` placeholder and we end 
up with the final generated code:

void printA(int a) {
    writeln('A', " - -", a);
}



In the last post, I skipped that middle step. It doesn't change 
anything else, but still it is sometimes helpful to understand 
exactly what is actually happening.

But yeah, same result in the end - `ch` becomes the literal 
representation of the item being looped over, so 'A', 'B', or 'C' 
in the example code.


More information about the Digitalmars-d-learn mailing list