Yes, there are no plans to break backwards compatibility, it's very
handy to be able to do:

def fullName = person.with{ "$firstName $lastName" }

We wouldn't want code like that to break.

Cheers, Paul.

On Thu, Nov 10, 2016 at 7:02 AM, Winnebeck, Jason
<[email protected]> wrote:
> Regarding Jochen's
> Please don't change the existing behavior of with, that was mentioned once 
> before, and it breaks backwards compatibility. I use it extensively in DSL 
> code, here is a fictional DSL example that is similar in what I use it for:
>
> def peopleWhere(Closure c) { people.findAll { it.with(c) } }
>
> def younglings = peopleWhere { age < 35 }
>
> In this example, I use with to avoid the extra boilerplate of cloning the 
> closure and setting resolve strategy, delegate, and calling it.
>
> Jason
>
> -----Original Message-----
> From: Jochen Theodorou [mailto:[email protected]]
> Sent: Wednesday, November 09, 2016 1:45 PM
> To: [email protected]
> Subject: Re: .with() variant that returns the original object
>
> On 09.11.2016 14:56, Winnebeck, Jason wrote:
>> My concern about "withThis" is that it implies that "this" is the parameter 
>> of the closure and not the return. We have for example withReader, 
>> withWriter, withOutputStream, etc. Those all imply that the parameter is the 
>> reader, the writer, the output stream. So in my mind, withThis tells me 
>> nothing at all about the fact that the original object is returned. withThis 
>> would not be consistent with the rest of Groovy.
>
> I agree with this one.
>
>> .with(returnThis:true) not only has runtime overhead, but keep in mind we 
>> are comparing this to the current state today, which is .with { return this 
>> }, or .with { this } depending on your style.
>
> here I have to correct a bit though. Just want to avoid we start discussing 
> the wrong thing... And I just noticed Paul made the very same mistake in the 
> original post already. Well, maybe not too late yet
>
> we are talking about
>
> foo.with {
>    return foo
> }
>
> or
>
> foo.with {
>   return it
> }
>
> not about something returning "this" at any point. "return this" would return 
> neither the open block, nor foo, it would be the enclosing class instance. No 
> delegate has influence about any explicit this ever.
>
> Ah, and I did just see Jason noticed it in a later mail... well, maybe saying 
> it two times is better ;)
>
> Anyway, that´s why I think withThis and with(returnThis:true) are not good 
> variants.
>
> Also it should be noted that we already have an alias for "with", which is 
> "identity". I would not want to have yet another one.
>
> Frankly... I think we should change what it returns. It is unlikely somebody 
> did depend on with returning null.
>
> bye Jochen
>
> This email message and any attachments are for the sole use of the intended 
> recipient(s). Any unauthorized review, use, disclosure or distribution is 
> prohibited. If you are not the intended recipient, please contact the sender 
> by reply email and destroy all copies of the original message and any 
> attachments.

Reply via email to