DIPX: Enum Literals / Implicit Selector Expression
bauss
jj_1337 at live.dk
Thu Jun 30 11:03:08 UTC 2022
On Thursday, 30 June 2022 at 10:58:37 UTC, Mike Parker wrote:
> On Thursday, 30 June 2022 at 10:51:31 UTC, ryuukk_ wrote:
>
>>
>>> auto color = orange;
>>> // What is color?
>>
>> same, it's not ``.orange`` therefore it's 1, if it where with
>> the dot, it's compile error telling you to be more explicit
>>
>>
>>> auto color = cast(int)orange;
>>> // What is color?
>>
>>
>> it's not ``.orange`` therefore it is your variable, it if were
>> with the dot, it'd take what ever is in the enum, then apply
>> the cast
>>
>>
>> I don't know it seems pretty obvious to me
>>
>> This feature is too good to not have
>
> My problem with this is it is *not* obvious at all to me. When
> I see `.foo`, I immediately think "foo is in the parent scope",
> as that what is what it means right now in D. If we're suddenly
> seeing `.foo` at module scope, now I've got a fault in my
> wiring; `.foo` suddenly has different meanings depending on the
> scope in which it's used.
>
> I mean, maybe I could get used to it if I used it. But I don't
> see myself using it at all.
>
> Not saying I'm against the feature, I just don't understand why
> `auto color = Color.orange` is a problem and how `Color color =
> .orange` is better. Because of four fewer characters?
What it seems like it's trying to solve is this:
```d
SomeEnum.a | SomeEnum.b | SomeEnum.c
```
So you could instead do:
```d
.a | .b | .c
```
But much like you I don't think that's at all clarified, maybe I
would settle for something like this:
SomeEnum(a | b | c) as that clearly tells you it's SomeEnum and
then it's clear you're picking the values from that, so a, b and
c will __always__ be from SomeEnum.
But personally I don't really like that syntax either as it
clashes too much with struct ctors and/or function calls.
So I don't have an actual good solution, so I guess in the end
I'm not for any changes.
More information about the Digitalmars-d
mailing list