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