Thread overview | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
March 07, 2020 Trying to understand a simple piece of code: dmd barray | ||||
---|---|---|---|---|
| ||||
Hi, I am trying to understand https://github.com/dlang/dmd/blob/master/src/dmd/backend/barray.d. Two questions: 1. What does this mean and why is it needed? line 95: alias array this; 2. The struct has no property called length - but this is referenced. Where does this come from? Thank you Regards |
March 07, 2020 Re: Trying to understand a simple piece of code: dmd barray | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dibyendu Majumdar | 07.03.2020 15:05, Dibyendu Majumdar пишет: > Hi, > > I am trying to understand https://github.com/dlang/dmd/blob/master/src/dmd/backend/barray.d. > > Two questions: > > 1. What does this mean and why is it needed? > > line 95: alias array this; > This means that `array` can be used instead of `this` > 2. The struct has no property called length - but this is referenced. Where does this come from? it comes from `array` being alias for `this`, see above > > Thank you > > Regards |
March 07, 2020 Re: Trying to understand a simple piece of code: dmd barray | ||||
---|---|---|---|---|
| ||||
Posted in reply to drug | On 3/7/20 7:26 AM, drug wrote:
> 07.03.2020 15:05, Dibyendu Majumdar пишет:
>> Hi,
>>
>> I am trying to understand https://github.com/dlang/dmd/blob/master/src/dmd/backend/barray.d.
>>
>> Two questions:
>>
>> 1. What does this mean and why is it needed?
>>
>> line 95: alias array this;
>>
> This means that `array` can be used instead of `this`
To expand on this, the compiler basically substitutes the symbol aliased here for the item itself if all other members are a compiler error.
So for example, if you have:
barr.length;
and barr has no member length, it tries:
barr.array.length
-Steve
|
March 07, 2020 Re: Trying to understand a simple piece of code: dmd barray | ||||
---|---|---|---|---|
| ||||
Posted in reply to drug | On Saturday, 7 March 2020 at 12:26:32 UTC, drug wrote:
>> I am trying to understand https://github.com/dlang/dmd/blob/master/src/dmd/backend/barray.d.
>>
>> Two questions:
>>
>> 1. What does this mean and why is it needed?
>>
>> line 95: alias array this;
>>
> This means that `array` can be used instead of `this`
Hmm should not that change the meaning of this throughout the struct? is this good practice?
Thank you
|
March 07, 2020 Re: Trying to understand a simple piece of code: dmd barray | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dibyendu Majumdar | On 3/7/20 8:06 AM, Dibyendu Majumdar wrote:
> On Saturday, 7 March 2020 at 12:26:32 UTC, drug wrote:
>
>>> I am trying to understand https://github.com/dlang/dmd/blob/master/src/dmd/backend/barray.d.
>>>
>>> Two questions:
>>>
>>> 1. What does this mean and why is it needed?
>>>
>>> line 95: alias array this;
>>>
>> This means that `array` can be used instead of `this`
>
> Hmm should not that change the meaning of this throughout the struct? is this good practice?
No, it's simply a fallback. If the symbol doesn't work with this.symbol, try this.array.symbol.
It's D's version of implicit conversion.
You can make the alias this a no-arg function and it will try calling that function.
-Steve
|
March 07, 2020 Re: Trying to understand a simple piece of code: dmd barray | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dibyendu Majumdar | On Saturday, 7 March 2020 at 13:06:39 UTC, Dibyendu Majumdar wrote:
> On Saturday, 7 March 2020 at 12:26:32 UTC, drug wrote:
>
>>> I am trying to understand https://github.com/dlang/dmd/blob/master/src/dmd/backend/barray.d.
>>>
>>> Two questions:
>>>
>>> 1. What does this mean and why is it needed?
>>>
>>> line 95: alias array this;
>>>
>> This means that `array` can be used instead of `this`
>
> Hmm should not that change the meaning of this throughout the struct? is this good practice?
>
> Thank you
This is also a way of imitating inheritance in c-ish code without classes.
|
March 07, 2020 Re: Trying to understand a simple piece of code: dmd barray | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On Saturday, 7 March 2020 at 14:33:29 UTC, Steven Schveighoffer wrote:
>
> It's D's version of implicit conversion.
>
> You can make the alias this a no-arg function and it will try calling that function.
>
Okay thank you.
|
Copyright © 1999-2021 by the D Language Foundation