Hi Roelof,

Polymorphism is the answer.

Object >> flattenInto: result
        result nextPut: anObject

UndefinedObject >> flattenInto: result
        ^self

Collection >> flattenInto: result
        self do: [ :item | item flattenInto: result ]

flatten: anObject
    ^ (OrderedCollection streamContents: [ :stream | anObject flattenInto: 
stream ]) asArray

Noury

> On 13 Sep 2020, at 11:26, Roelof Wobben via Pharo-users 
> <pharo-users@lists.pharo.org> wrote:
> 
> Hello, 
> 
> I know that OOP is not asking a object what it is but I have to flatten a 
> array so I did this : 
> 
> flattenArray: aCollection
>     ^ (OrderedCollection
>         streamContents: [ :stream | self flatten: aCollection into: stream ])
>         asArray
> 
> flatten: anObject into: result
>     ^ anObject isCollection
>         ifTrue: [ anObject do: [ :item | self flatten: item into: result ] ]
>         ifFalse: [ anObject ifNotNil: [ result nextPut: anObject ] ]
> 
> The name flattenArray is given bij exercism. 
> 
> Now I wonder how I can make this more a OOP solution. 
> 
> Can someone give me some hints or some examples ?
> 
> Roelof
> 

Reply via email to