On 8/27/21 12:41 AM, Merlin Diavova wrote:
On Friday, 27 August 2021 at 04:01:19 UTC, Ali Çehreli wrote:
On 8/26/21 7:17 PM, Merlin Diavova wrote:

[...]

Then the operations downstream will not produce any results. For example, the array will be empty below:

import std.stdio;
import std.range;
import std.algorithm;
import std.string;
import std.functional;

void main() {
  auto significantLines = stdin
                          .byLineCopy
                          .map!strip
                          .filter!(not!empty)
                          .filter!(line => line.front != '#')
                          .array;

  if (significantLines.empty) {
    writeln("There were no significant lines.");

  } else {
    writefln!"The lines: %-(\n%s%)"(significantLines);
  }
}

Ali

And there it is!

I was missing

```d
.filter!(not!empty)
```

My code now works exactly how I wanted. Thanks!

Be careful with this! `not!empty` is *only* working because you are using arrays (where `empty` is a UFCS function defined in std.range). Other ranges this will not work on. Instead, I would recommend a lambda (which will work with arrays too):

```d
.filter!(r => !r.empty)
```

-Steve

Reply via email to