Re: static foreach direct use of variables

2019-01-01 Thread Michelle Long via Digitalmars-d-learn

On Tuesday, 1 January 2019 at 21:34:08 UTC, Paul Backus wrote:

On Tuesday, 1 January 2019 at 21:14:09 UTC, Michelle Long wrote:

auto foo(S s)
{
static foreach(k, p; [s, this])
for(int i = 0; i < p.length; i++)
...
}

The idea is to provide single for loop structure for each of 
the variables(in this case s and this).


You can do this with `std.meta.AliasSeq`:

string[] a = ["lions", "tigers", "bears"];
int[] b = [123, 456, 789];

static foreach(array; AliasSeq!(a, b)) {
foreach (item; array) {
writeln(item);
}
}


I tried that but it didn't work... I will try again.


Re: static foreach direct use of variables

2019-01-01 Thread Paul Backus via Digitalmars-d-learn

On Tuesday, 1 January 2019 at 21:14:09 UTC, Michelle Long wrote:

auto foo(S s)
{
static foreach(k, p; [s, this])
for(int i = 0; i < p.length; i++)
...
}

The idea is to provide single for loop structure for each of 
the variables(in this case s and this).


You can do this with `std.meta.AliasSeq`:

string[] a = ["lions", "tigers", "bears"];
int[] b = [123, 456, 789];

static foreach(array; AliasSeq!(a, b)) {
foreach (item; array) {
writeln(item);
}
}


Re: static foreach direct use of variables

2019-01-01 Thread Adam D. Ruppe via Digitalmars-d-learn

On Tuesday, 1 January 2019 at 21:14:09 UTC, Michelle Long wrote:

auto foo(S s)
{
static foreach(k, p; [s, this])
for(int i = 0; i < p.length; i++)
...
}


try

static foreach(...) {{
 stuff
}}


The double {{ and double }} are intentional.



static foreach direct use of variables

2019-01-01 Thread Michelle Long via Digitalmars-d-learn

auto foo(S s)
{
static foreach(k, p; [s, this])
for(int i = 0; i < p.length; i++)
...
}

The idea is to provide single for loop structure for each of the 
variables(in this case s and this).


The is to avoid string mixins which are pathetic for this kind of 
work.


The point is that instead of having to do

for(int i = 0; i < s.length; i++)
 ...
for(int i = 0; i < this.length; i++)
 ...

in which case ... might be very long.

Sure one can create a function and all that mess but the compiler 
should be able to do symbol replacement very naturally and easily.