So basically you are trying to deal with missing values in collections. People working with R or Python data analytics framework made some ways to work with specific data structures called dataframes where you can have some missing values.
For example you may have a look here: http://pandas.pydata.org/pandas-docs/stable/missing_data.html On Wed, Dec 21, 2016 at 4:15 AM, 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 -- Serge Stinckwich UCBN & UMI UMMISCO 209 (IRD/UPMC) Every DSL ends up being Smalltalk http://www.doesnotunderstand.org/