On Wed, May 31, 2023 at 2:53 AM Larry Garfield <la...@garfieldtech.com>
wrote:

> On Tue, May 30, 2023, at 10:04 PM, Alexandru Pătrănescu wrote:
> > On Tue, May 30, 2023, 19:39 Larry Garfield <la...@garfieldtech.com>
> wrote:
> >
> >> On Mon, May 29, 2023, at 11:22 PM, Máté Kocsis wrote:
> >> > To be honest, the current behavior seemed like the natural choice for
> >> > me, and I didn't really consider to execute the __clone() method after
> >> the
> >> > clone assignments.
> >> > Do you have a use-case in mind when you need to forward-pass
> information
> >> to
> >> > __clone()?
> >>
> >> Not a specific one off hand.  It's more a conceptual question.  `with`
> has
> >> more contextual awareness than __clone(), so it should have "first
> crack"
> >> at the operation, so that if necessary it can make changes that
> __clone()
> >> can then respond to.  The inverse doesn't make sense.
> >>
> >> The only reason for `with` to come after would be to allow `with` to
> >> "override" or "undo" something that __clone() did.  Generally speaking,
> if
> >> you have to undo something you just did, you shouldn't have done it in
> the
> >> first place, so that's a less compelling combination.
> >>
> >> This one isn't a deal breaker, but we should be sure to think it through
> >> as it's kinda hard to reverse later.
> >>
> >
> > To me so far also it was natural to assume that __clone is first and only
> > after that the rest of the operations.
> > But `with` operations, be it properties assignment or even a closure,
> would
> > run in the context of the caller of clone and sometimes this might be run
> > not from a method of the cloned class.
> >
> > An example:
> > There is a class that represents persons of a fictive country/planet.
> > Each person has many properties but has also a first name and a last name
> > and there is a rule: the two names must not start with the same letter.
> > Both names cannot be changed as they are defined readonly.
> > Creation of new persons can be done using new for new random properties
> or
> > using clone to preserve existing properties. But in both cases the first
> > name and last name are randomly chosen.
> > If we want to control the last name value during clone that would be
> > possible using the `with` operation but the logic to allocate a first
> name
> > will only happen in `__clone()`method.
> >
> > To be able to achieve this we must have __clone last, as there we have
> the
> > internal validations, operations and also access to private/protected
> > members that are not accesible from where clone is being called.
> >
> > Regards,
> > Alex
>
> I... could not understand that in the slightest.  Can you show it in code?
>
>

Sorry for that. Here you go: https://3v4l.org/JIBoI/rfc#vgit.master
If __clone would be first, there is no way to enforce the rule that a
person cannot have their first name starting with the same letter as last
name.

Regards,
Alex

Reply via email to