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

Reply via email to