> A ++ operator is evil, because you cannot override or redefine it
> (like any other message).

In C++ you can.

> And it works only for numbers (no pointers
> in smalltalk)
> and so, completely falls out of object model.

It can be done and has been done in Helvetia without falling out of
the object model.

I don't remember the details, but I was essentially rewriting

    i++

to something along

    i increment: [ :v | i := v ]

where you the semantics of #increment: are implemented in the objects
as you wish. For numbers this would be something like:

    Number>>#increment: aBlock
        ^ aBlock value: self + 1

For other objects other 'meaningful' implementations can be added, for example:

    SequenceableCollection>>#increment: aBlock
        ^ aBlock value: self allButFirst , (Array with: self first)

    Stream>>#increment: aBlock
        ^ aStream skip: 1

    etc.

Cheers,
Lukas

-- 
Lukas Renggli
www.lukas-renggli.ch

Reply via email to