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.garau@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