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
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
participants (2)
-
Esteban A. Maringolo -
Tim Mackinnon