On Thursday, 24 May 2018 at 23:02:00 UTC, Neia Neutuladh wrote:
On Thursday, 24 May 2018 at 22:43:00 UTC, IntegratedDimensions wrote:
Doesn't make any sense?

foreach(a; x)

if x is not an array then a = x and the loop reduces simply and function to the case it is not so their can be no harm.

It unifies the concepts so that one does not have to worry if x is an array or not and can offer no harm since when x is not an array everything simply reduces to an an alias of x.

You can already do this for any type you define:

class Foo
{
  auto iterate() { return only(this); }
  alias iterate this;
}

Can you give examples of code that is awkward today that would be simplified with your proposal? I don't expect people to give full cost-benefit analyses for every suggestion, but it'd be nice if you could at least mention some of the upsides.

And then you can generalize this for any type

auto elseOnly(T)(T t) {
  import std.range: isInputRange;
  static if (isInputRange!T) {
    return t;
  } else  {
    import std.range: only;
    return only(t);
  }
}

foreach(i; 3.elseOnly) {
}

foreach(i; [1, 2, 3].elseOnly) {
}


Cheers
- Ali


Reply via email to