www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Static foreach internal variable

reply Andrey <saasecondbox yandex.ru> writes:
Hello,
is it possible to declare an internal variable in "static 
foreach" and on each iteration assign something to it?
Example:
static foreach(arg; SomeAliasSeq)
{
    internal = arg[0].converted;    // a shortcut for expression 
 "arg[0].converted"

    static if(internal.length == 0) { ... }
    else static if(internal.isNull) { ... }
    else { ... }
}
Aug 30 2018
next sibling parent Basile B. <b2.temp gmx.com> writes:
On Thursday, 30 August 2018 at 08:19:47 UTC, Andrey wrote:
 Hello,
 is it possible to declare an internal variable in "static 
 foreach" and on each iteration assign something to it?
 Example:
static foreach(arg; SomeAliasSeq)
{
    internal = arg[0].converted;    // a shortcut for 
 expression "arg[0].converted"

    static if(internal.length == 0) { ... }
    else static if(internal.isNull) { ... }
    else { ... }
}
Add a scope : static foreach(arg; SomeAliasSeq) {{ }} And this should work without complaint about "internal" already existing.
Aug 30 2018
prev sibling parent reply drug <drug2004 bk.ru> writes:
30.08.2018 11:19, Andrey пишет:
 Hello,
 is it possible to declare an internal variable in "static foreach" and 
 on each iteration assign something to it?
 Example:
 static foreach(arg; SomeAliasSeq)
 {
    internal = arg[0].converted;    // a shortcut for expression 
 "arg[0].converted"

    static if(internal.length == 0) { ... }
    else static if(internal.isNull) { ... }
    else { ... }
 }
static foreach will be lowered to: ``` { auto internal = SomeAliasSeq[0][0].converted; static if(internal.length == 0) { ... } else static if(internal.isNull) { ... } else { ... } auto internal = SomeAliasSeq[1][0].converted; static if(internal.length == 0) { ... } else static if(internal.isNull) { ... } else { ... } ... auto internal = SomeAliasSeq[N][0].converted; // N == SomeAliasSeq.length static if(internal.length == 0) { ... } else static if(internal.isNull) { ... } else { ... } } ``` if you use scope it will be ``` { { auto internal = SomeAliasSeq[0][0].converted; static if(internal.length == 0) { ... } else static if(internal.isNull) { ... } else { ... } } { auto internal = SomeAliasSeq[1][0].converted; static if(internal.length == 0) { ... } else static if(internal.isNull) { ... } else { ... } } ... { auto internal = SomeAliasSeq[N][0].converted; // N == SomeAliasSeq.length static if(internal.length == 0) { ... } else static if(internal.isNull) { ... } else { ... } } } ``` every instance of internal variable will be defined in its own scope
Aug 30 2018
parent Andrey <saasecondbox yandex.ru> writes:
On Thursday, 30 August 2018 at 09:49:15 UTC, drug wrote:
 30.08.2018 11:19, Andrey пишет:
Thanks everybody. Works!
Aug 30 2018