On Fri, Aug 16, 2024, at 16:17, Larry Garfield wrote:
> On Fri, Aug 16, 2024, at 6:35 AM, Alexandru Pătrănescu wrote:
> > Hi Nick,
> >> 
> >> Is there any interest in having enums as class constants?
> >> 
> >> I'm often finding cases where I would like to have an enum inside of a
> >> class, but don't want a free-floating enum that's basically like
> >> another class.
> >> 
> > 
> > ...<snip>... 
> > 
> >> 
> >> class SSHClient {
> >> 
> >>    public const enum CommandResult
> >>    {
> >>        case Success;
> >>        case Failure;
> >>        case Unknown;
> >>        case Timeout;
> >>    }
> >> 
> >>    // ...
> >> }
> >> 
> >> 
> >> // Usage:
> >> 
> >> SSHClient::CommandResult::Success
> >
> >
> > I feel this topic could be maybe more broad and be called "nested 
> > classes" that are already supported in multiple languages: Java, Swift, 
> > Python, C#, C++, JavaScript, etc.
> >
> > The syntax you showed is usually identical with what other languages 
> > use, except that probably the const is unnecessary.
> > The nested class can have visibility as sometimes having it private 
> > makes sense.
> > Accessing it through `::` is probably fine, but a deeper look at the 
> > grammar might be necessary.
> > The nested class would have access to parent class private properties 
> > and methods.
> >
> > I also mentioned this topic on the subject of defining a type in an 
> > autoloader compatible way.
> > And indeed, a type could also be defined nested in a class if we want 
> > to support that as well.
> >
> > Now, this feature is not simple, and I think it needs proper 
> > sponsorship from someone experienced with internals.
> >
> > Regards,
> > Alex
> 
> I agree with Alexandru.  Since enums are 90% syntactic sugar over classes, 
> "inner enums" would be 80% of the way to "inner classes".  And I would be in 
> favor of inner classes. :-)  There's a lot of potential benefits there, but 
> also a lot of edge cases to sort out regarding visibility, what is allowed to 
> extend from what, etc.  But that would support inner enums as well.

>From recently looking into this for totally unrelated reasons, nested enums 
>would be far easier to implement on a grammar level. Enums also have some 
>constraints that make it simpler than the general “nested classes,” such as 
>rules regarding inheritance.

As for the actual implementation, it’ll be the edges that kill you.

I would recommend just doing enums, and keep the scope smaller. 

Reply via email to