On Sunday, September 2, 2018 7:21:05 AM MDT bauss via Digitalmars-d wrote:
> Is there a reason why you cannot create a separate scope within a
> static foreach?
>
> The below will not compile:
>
> ```
> enum a = ["a" : "a", "b" : "b", "c" : "c"];
>
> static foreach (k,v; a)
> {
>      {
>          enum b = k;
>          enum c = v;
>      }
> }
> ```
>
> It works if it's in a function of course.
>
> This creates a big limitation when you're trying to ex. loop
> through members of inherited classes, interfaces etc. and then
> want to store the information in variables, because you cannot do
> it. Which means to work around it you have to do it all in an
> ugly one-liner.
>
> Is it intended behavior? If so, why? If not is there a workaround
> until it can be fixed?

If you're not inside a function, why would it even be useful to be able to
do that? That would be the equivalent of

{
    enum b = "a";
    enum c = "a";
}
{
    enum b = "b";
    enum c = "b";
}
{
    enum b = "c";
    enum c = "c";
}

Creating scopes like that isn't legal outside of a function (hence the
compiler error), but even if it were, what good would it do you? There's no
way to refer to those scopes. The only way that such declarations would make
sense is if they're inside scopes with their own names so that they can be
referred to via those names (e.g. inside a struct or template) or if they
aren't in separate scopes and have unique names (which would mean giving
them names other than b and c rather than trying to scope them). I fail to
see why what you're complaining about here would even be useful.

Now, the fact that it's a bit of a pain to give each of those enums a unique
name can certainly be annoying, and that's a problem with static foreach in
general, but I don't understand why creating an extra scope like you're
trying to do here would be at all useful outside of a function. What are you
really trying to do here?

- Jonathan M Davis



Reply via email to