Yep - as I was reading the replies from you and Esteban - I was thinking there 
was something odd, and its correct, I’ve been careless - the problematic code 
had a trailing #sum to it, which is actually where the problem was…. 

total := schedule ifEmpty: [ 0 ] ifNotEmpty: [ :c |
                (c collect: [ :r | ((DateAndTime fromString: r end) - 
(DateAndTime fromString: r start)) asHours ]) sum ].

So you are both correct - it should have used inject.

total := schedule inject: 0 into: [ :result :item | result + ((DateAndTime 
fromString: item end) - (DateAndTime fromString: item start)) asHours ].

Oops - thanks for being my sound board.

Tim 

> On 30 Apr 2018, at 22:02, Francisco Garau <[email protected]> wrote:
> 
> 
> Have you tried #inject:into: ? Looks like what are needing here 
> 
> - Francisco
> 
> 
>> On 30 Apr 2018, at 19:37, Tim Mackinnon <[email protected]> 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
>> 


Reply via email to