std.array : appender woes

abad via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jun 16 03:08:49 PDT 2016


On Thursday, 16 June 2016 at 07:59:50 UTC, cym13 wrote:
> On Thursday, 16 June 2016 at 07:47:03 UTC, abad wrote:
>> import std.array : appender;
>> import std.stdio : writeln;
>>
>> void main() {
>>     auto app = appender!(char[]);
>>     app.put('x');
>>     auto foo = app.data;
>>     app.clear; // done, start a new array
>>     app.put('y');
>>     writeln(foo);
>> }
>>
>> This prints out 'y'. It's not surprising because what I 
>> suppose app.data is doing is just returning a slice of the 
>> dynamic array. Clear() resets the counter of current position. 
>> But this behavior is confusing in practical use, IMHO.
>>
>> Should calling clear in your opinion guarantee that a new 
>> array gets allocated?
>
> I don't find it confusing at all, what did you expect?

Consider the word clear in this context. What is it that gets 
cleared? The data in the array (which might imply reallocation)? 
Nope, what gets "cleared" is the index to current position in the 
array. I think 'reset' may have been a better name for the 
function.


More information about the Digitalmars-d-learn mailing list