Most convenient way to write a loop with fixed length and no need for the index?

Anton Fediushin via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Jun 30 01:19:07 PDT 2017


On Friday, 30 June 2017 at 07:44:45 UTC, Martin Tschierschke 
wrote:
> What do I have to do, to make this work?
>
> iota(number).each!...command_x(a...);command_y(b...);command_z(c..))
>                  ^^^^^?
> how to write the lambda?
>
> Similar to the ruby (1..number).each{ commands...}
>
> Don't want to write the following, because the index i is not 
> used inside the loop
> and this should be clear when reading it:
>
>   for (i=0;i<number;i++){commands...}
>
> or
>
>   foreach(i;iota(number)){commands...}

You can use it like this:
iota(10).each!((x) { command1(); command2(); ... });

Or there is a short syntax (lambda):
iota(10).each!((x) => command1());

See http://dlang.org/spec/expression.html#Lambda for more info 
about lambdas.


> Or is there something like number.times!{....} possible?
You can write your own function. It is simple.
void times(alias fun)(size_t i) {
	foreach(unused;0..i)
		fun();
}

and use it like this:
10.times!({ writeln("yaaay"); });





More information about the Digitalmars-d-learn mailing list