Thread overview | ||||||
---|---|---|---|---|---|---|
|
January 01, 2019 static foreach direct use of variables | ||||
---|---|---|---|---|
| ||||
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. |
January 01, 2019 Re: static foreach direct use of variables | ||||
---|---|---|---|---|
| ||||
Posted in reply to Michelle Long | 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.
|
January 01, 2019 Re: static foreach direct use of variables | ||||
---|---|---|---|---|
| ||||
Posted in reply to Michelle Long | 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);
}
}
|
January 01, 2019 Re: static foreach direct use of variables | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paul Backus | 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.
|
Copyright © 1999-2021 by the D Language Foundation