static array is not a range
Siarhei Siamashka
siarhei.siamashka at gmail.com
Wed Jan 10 09:40:54 UTC 2024
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.
More information about the Digitalmars-d-learn
mailing list