[REBOL] Re: Ready for REBOL/Core 2.6?
From: pwoodward:cncdsl at: 8-Mar-2002 12:14
> On Fri, Mar 08, 2002 at 10:34:35AM +0100, Cyphre wrote:
> > Holger(RT),
> Carl may have been exaggerating there. The reason why objects cannot be
> extended is the same reason why there is currently a limit on the number
> of words in the system (which, btw, will be increased from 4000 to 8000
> in Core 2.6). We do intend to lift these restrictions, but doing so is not
> trivial, and it most likely won't be in 2.6.
How would extend be significantly different than using the following?
; start example
example: make object! [
the-time: now/time
set-time: does [the-time: now/time]
]
timer: make example []
; end example
In this case, "example" is being used as a prototype object. It is cloned
(rather a new instance of it is created) as "timer". In theory (unless I'm
missing something) "timer" is now seperate from the original "example" and
can be modified independently. New variables and functions can be added to
timer
without affecting "example".
Now, I realize this isn't quite the same as
// Start Example
class MyOldObject {
public Timestamp theTime = new Timestamp(System.currentTimeMillis());
public void setTheTime() {
this.theTime.setTime(System.currentTimeMillis());
}
}
class MyNewObject extends MyOldObject {
}
// End Example
Because - in Java there is a difference between a class and an object. The
class is a blueprint, the object is an instance. In Rebol this distinction
is blurred. Using make object! essentially creates the class/object at the
same time - the word you are defining is both a class and an instance of
that class all at once.
So - when you choose to make a new word/value pairing (like timer: make
example []) you're in effect creating a new class and instance of that class
all in one. You can then freely override the variables and functions of the
newly created object as you see fit...
Sorry to ramble so much - and I could be dead wrong, but this is just the
way Rebol seems to behave when compared to other languages.
- Porter Woodward