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