> On Feb 10, 2021, at 2:42 PM, Ryan Joseph <generic...@gmail.com> wrote:
> 
>  We should keep it as simple as possible imo.

It's not as elegant as other ideas we may think of but I think it's good enough 
to let users write boilerplate methods to resolve naming conflicts. We don't 
need to introduce new syntax or concepts. This is the power of traits vs 
multiple inheritance. We get the shared namespace like normal OOP inheritance 
but have full control over any conflicts that arise by mixing in traits.

====================

type
  TTraitA = trait
    procedure DoThis;
  end;
  TTraitB = trait
    procedure DoThis;
  end;
  
type
  TMyClass = class
    private
      property traitA: TTraitA implements _traitA;
      property traitB: TTraitB implements _traitB;
    public
      // DoThis now hides traitB.DoThis like it would in normal Object Pascal
      procedure DoThis;
  end;

procedure TMyClass.DoThis;
begin
  // resolve the conflict by directly referencing the trait
  traitA.DoThis;
end;

Regards,
        Ryan Joseph

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to