You can learn so much from these innocent questions.... Maximiliano pointed out 
that there is a difference between #sum and a method I never noticed 
#sumNumbers, the latter would avoided my problem too...

Sent from my iPhone

> On 30 Apr 2018, at 23:00, Tim Mackinnon <tim@testit.works> wrote:
> 
> 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 <francisco.ga...@gmail.com> wrote:
>> 
>> 
>> Have you tried #inject:into: ? Looks like what are needing here 
>> 
>> - Francisco
>> 
>> 
>>> On 30 Apr 2018, at 19:37, Tim Mackinnon <tim@testit.works> 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