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.