On 3/8/25 4:14 AM, Anonymouse wrote:
> On Saturday, 8 March 2025 at 12:02:41 UTC, Nick Treleaven wrote:
>> `assert(0 in aa2)` actually fails too.
>
> So it does! My bad. It makes more sense now.
>
>> When an AA is null, it must be passed by ref to modify it. Once it is
>> non-null, its keys and values can be modified. But even a non-null AA
>> cannot be reassigned by passing it without ref.
>>
>> Note that an AA can be constructed using `new` before passing by
>> value. See:
>> https://dlang.org/spec/hash-map.html#construction_and_ref_semantic
>
> I'll try that, thanks.

To complete the story, it is the same with arrays:

void main() {
    int[] arr;
    addElement(arr);

    // This array is not affected.
    assert(arr is null);    // Passes
}

void addElement(int[] arr) {
    // Only this local array is initialized.
    arr ~= 42;
}

Ali

Reply via email to