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
>>