Thread overview | ||||||
---|---|---|---|---|---|---|
|
June 30, 2017 Most convenient way to write a loop with fixed length and no need for the index? | ||||
---|---|---|---|---|
| ||||
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...} Or is there something like number.times!{....} possible? |
June 30, 2017 Re: Most convenient way to write a loop with fixed length and no need for the index? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Martin Tschierschke | On 06/30/2017 12:44 AM, 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...}
>
> Or is there something like number.times!{....} possible?
Seems easy to put together: :)
import std.stdio;
auto times(alias Func, T)(T number) {
import std.range : iota;
import std.algorithm : each;
return number.iota.each!(_ => Func());
}
void foo() {
writeln("foo");
}
void bar() {
writeln("bar");
}
void main() {
3.times!({ foo(); bar(); });
}
Ali
|
June 30, 2017 Re: Most convenient way to write a loop with fixed length and no need for the index? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Martin Tschierschke | 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"); }); |
September 09, 2017 Re: Most convenient way to write a loop with fixed length and no need for the index? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Anton Fediushin | On Friday, 30 June 2017 at 08:19:07 UTC, Anton Fediushin wrote: > 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..)) > > > You can use it like this: > iota(10).each!((x) { command1(); command2(); ... }); I missed this syntax! > > 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"); }); Thank You! Ali and Anton! D is so cool! :D ps. This post was written but not send... on June 30... |
Copyright © 1999-2021 by the D Language Foundation