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
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.




Reply via email to