Hi Tim,

What I found confusing there is that with #select:thenCollect: or
#collect:thenXxx: you're always dealing with collections.

In your #collect:ifNone: there is a mix. You can return a collection
(#collect:) or the result of evaluating the emptyBlock, which in your
example is a number, so I it seems like a semantic mismatch smell to me.

Following your example:

myVar := result ifEmpty: [ 0 ] ifNotEmpty:[ :r | r collect: [:I | i
hours ]].

What will be in myVar? a collection? a number? something else?.

Maybe your example is too abstract to give a good feedback.

Regards,



On 30/04/2018 15:37, Tim Mackinnon wrote:
> 
> Hi - I hit a small bug in my lunch experiments with Willow where I wanted to 
> sum up a collection of support hours.
> 
> I was collect: in the hours worked and hadn’t accounted for an empty 
> collection.
> 
> When I went to do it I was surprised there isn’t a concept of 
> #collect:ifNone: that mirrors something like at:ifAbsent: or the nicely 
> readable collect:thenXxx: methods.
> 
> Why is this?
> 
> I’m curious about style - and the elegance of my workaround :
> 
> result ifEmpty: [ 0 ] ifNotEmpty:[ :r | r collect: [:I | i hours ]]
> 
> which is ok, but seems a mouthful?
> 
> Am I missing a trick?
> 
> Tim
> 
> Sent from my iPhone
> 

-- 
Esteban A. Maringolo

Reply via email to