how to skip the next (n) item & continue from (n+1) with a range ? e.g. in File(fn).byLine();

mw mingwu at gmail.com
Mon Jun 22 20:49:55 UTC 2020


On Monday, 22 June 2020 at 20:46:30 UTC, mw wrote:
> On Monday, 22 June 2020 at 20:00:50 UTC, Steven Schveighoffer 
> wrote:
>> I wouldn't recommend it, instead do a while loop:
>>
>> auto range = File(fn).byLine;
>>
>> while(!range.empty)
>> {
>>    auto line = range.front;
>>    if(someCond(line)) {
>>         range.popFrontN(n);

I'm asking this, because here it need to be range.popFrontN(n+1);

i.e. bug-prone

can be fixed by:
    auto line = range.front;
    range.popFront;  // pop immediately


>>    } else {
>>         regularProcess(line);
>>         range.popFront;
>>    }
>> }
>
> Thanks.
>
> so `front` is peek, and `popFront` is the pop action whose 
> return type is `void`, why we need two *separate* calls instead 
> of just let `popFront` return T (or do we have another function 
> for this)? i.e if the user forget `popFront`, it will prone to 
> infinite loop bug?

so my question.


More information about the Digitalmars-d-learn mailing list