On a more general note, what do you think of how it's done in other languages (Haskell's "Maybe") ?
We already have it in the form of nil / all other objects and #ifNil:, but that would make it explicit with a couple of classes: Maybe subclass: ActualValue Maybe subclass: MissingValue and a #default: or #orElse: accessor to get the wrapped value, defaulting to something else, or some block-evaluating message similar to #ifNotNilDo: On 21 December 2016 at 12:05, Tudor Girba <tu...@tudorgirba.com> wrote: > Hi, > > I forgot to mention that another option I played with was to always use a > metric object, and never numbers. So, numberOfLinesOfCode would return a > MetricValue. I think the same idea is present in acqoncagua. > > Cheers, > Doru > > -- > www.tudorgirba.com > > "Every thing has its own flow" > > > On 21 Dec 2016, at 08:21, Tudor Girba <tu...@tudorgirba.com> wrote: > > > > Hi Alex, > > > > Following the design proposed by Stef, in your case you would use a > different collection. > > > > Cheers, > > Doru > > > > > >> On Dec 21, 2016, at 8:13 AM, Alexandre Bergel <alexandre.ber...@me.com> > wrote: > >> > >> Hi Stef, > >> > >> You are raising an interesting point to discuss. This MissingValue is > indeed better than having -1 > >> Something to keep in mind: it may be that one would like to focus on > the missing value and not really the value. > >> > >> Consider: > >> > >>> testCollect > >>> > >>> | uarray collected | > >>> uarray := UniformOrderedCollection new. > >>> uarray add: 10. > >>> uarray add: 20. > >>> uarray add: (MissingValue discarding). > >>> collected := uarray collect: [ :each | each ]. > >>> self assert: collected size equals: 2. > >> > >> It could well be that I would like to be able to query over the > MissingValue. > >> Can something like possible: uarray collect: #isMissing > >> ? > >> > >> Cheers, > >> Alexandre > >> > >> > >>> On Dec 20, 2016, at 10:15 PM, stepharong <stephar...@free.fr> wrote: > >>> > >>> Hi dear great OO designers > >>> > >>> Here is a little challenges for your brainy souls :) > >>> > >>> In Moose when we compute metrics it may happen than a tool (often > external to pharo) does not compute a metrics > >>> and when we request it in moose we check and often we return a not so > good -1. > >>> > >>> I'm trying to brainstorm on a solution > >>> > >>> - first may be the simplest way is to not invoke a metrics when it is > not computed. But it means that we should know it and that we should have a > registration mechanism. After all this is probably the best solution. > >>> > >>> - Second we were thinking to use exception but when we have multiple > entities missing one metrics.... I have serious doubts. > >>> > >>> - Second I was thinking about having the following behavior > >>> > >>> testCollect > >>> > >>> | uarray collected | > >>> uarray := UniformOrderedCollection new. > >>> uarray add: 10. > >>> uarray add: 20. > >>> uarray add: (MissingValue discarding). > >>> collected := uarray collect: [ :each | each ]. > >>> self assert: collected size equals: 2. > >>> > >>> testDo > >>> > >>> | res uarray | > >>> uarray := UniformOrderedCollection new. > >>> uarray add: 10. > >>> uarray add: 20. > >>> uarray add: (MissingValue discarding). > >>> uarray add: 40. > >>> res := 0. > >>> uarray do: [ :each | res := res + each ]. > >>> self assert: res equals: 70. > >>> > >>> > >>> testCollectDefaulting > >>> > >>> | uarray collected | > >>> uarray := UniformOrderedCollection new. > >>> uarray add: 10. > >>> uarray add: 20. > >>> uarray add: (MissingValue default: 33). > >>> collected := uarray collect: [ :each | each ]. > >>> self assert: collected size equals: 3. > >>> self assert: collected third equals: 33 > >>> > >>> > >>> I basically started to implement > >>> > >>> > >>> do: aBlock > >>> "Refer to the comment in Collection|do:." > >>> 1 to: self size do: > >>> [:index | (self at: index) toDo: aBlock on: self] > >>> > >>> > >>> > >>> collect: aBlock > >>> "Evaluate aBlock with each of the receiver's elements as the > argument. > >>> Collect the resulting values into a collection like the receiver. > Answer > >>> the new collection." > >>> > >>> | newCollection | > >>> newCollection := self species new. > >>> self > >>> do: [ :each | each toCollect: aBlock on: newCollection ]. > >>> ^ newCollection > >>> > >>> > >>> and > >>> > >>> DiscardingValue >> toCollect: aBlock on: aCollection > >>> "discard computation" > >>> ^ self > >>> > >>> > >>> Object >> toCollect: aBlock on: aCollection > >>> > >>> ^ aCollection add: (aBlock value: self) > >>> > >>> > >>> So I imagine that you see the design and I wanted to get your point of > view. > >>> > >>> -- > >>> Using Opera a kind of bad mail client but far better than thunderbird > >>> _______________________________________________ > >>> Moose-dev mailing list > >>> moose-...@list.inf.unibe.ch > >>> https://www.list.inf.unibe.ch/listinfo/moose-dev > >> > >> -- > >> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: > >> Alexandre Bergel http://www.bergel.eu > >> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;. > >> > >> > >> > >> _______________________________________________ > >> Moose-dev mailing list > >> moose-...@list.inf.unibe.ch > >> https://www.list.inf.unibe.ch/listinfo/moose-dev > > > > -- > > www.tudorgirba.com > > www.feenk.com > > > > "If you interrupt the barber while he is cutting your hair, > > you will end up with a messy haircut." > > > _______________________________________________ > Moose-dev mailing list > moose-...@list.inf.unibe.ch > https://www.list.inf.unibe.ch/listinfo/moose-dev > -- Damien Pollet type less, do more [ | ] http://people.untyped.org/damien.pollet