On Tuesday, 9 January 2024 at 21:30:06 UTC, Alexibu wrote:
If each works, I can't see why map filter etc can't work consistently where they only need an input range.
```d
auto line = arr.filter!(a > 0).map!(a => a.to!string).joiner("\t").text;
```
Should be fine because each result range is passed on the stack to the next algorithm, and then at the end the text (or array) algorithm doesn't return a range. Also this should be fine because the ranges are all used on the stack.

[...]

I wonder if the compiler could tell if you are only using the range as a temporary argument as opposed to assigning it to a variable ?

You can do it like this:
```D
import std;
void main() @trusted {
  float[6] arr = [1, 2, 3, 4, 5, 6];
auto line = arr[].filter!(a => a > 0).map!(a => a.to!string).joiner("\t").text;
  writeln(line);
}
```

The `arr[]` creates a temporary slice. This currently has to be run as `@trusted` and you also need to be sure that the temporary slice does not escape the scope.

Reply via email to