What does the [] operator do here?

WebFreak001 d.forum at webfreak.org
Thu Apr 2 07:07:02 UTC 2020


On Wednesday, 1 April 2020 at 19:35:30 UTC, Net wrote:
> from the below code, the expression "case [c]":
>
> void main()
> {
>     import std.stdio, std.string, std.algorithm, std.conv;
>
>     // Reduce the RPN expression using a stack
>     readln.split.fold!((stack, op)
>     {
>         switch (op)
>         {
>             // Generate operator switch cases statically
>             static foreach (c; "+-*/")
>                 case [c]:
>                     return stack[0 .. $ - 2] ~
>                         mixin("stack[$ - 2] " ~ c ~
>                             " stack[$ - 1]");
>             default: return stack ~ op.to!real;
>         }
>     })((real[]).init).writeln;
> }

the `static foreach (c; "+-*/")` operates on the characters, so c 
will be a char.

You use c in the case for the `switch (op)` where op is some char 
array (string), so if you want to check it in the switch, you 
will have to make c an array.

Here the example uses [c] but you could also `static foreach (c; 
["+", "-", "*", "/"])` but I think [c] is a more elegant solution 
because it's done at compile time anyway. (case values are 
evaluated at compile time like if you would write enum x = [c];)


More information about the Digitalmars-d-learn mailing list