[REBOL] Re: steel... update... of the week (for more advanced rebolers)
From: g:santilli:tiscalinet:it at: 27-Jun-2003 15:49
Hi Maxim,
On Friday, June 27, 2003, 12:23:44 AM, you wrote:
MOA> Its just that rebol is a little static when in comes to objects..
The problem actually is, that we have to do things differently. We
continuosly try to apply "old" techniques in REBOL, and this is
sometimes frustrating. Only when we realize that there's a
different way, everything becomes so simple that we feel very
stupid for not having thought of it the first time. :)
For example, wrt face/init, it's not casual that it is a block.
This way, when creating a new style from an old one, we can write:
Style MyButton Button [
append init [
; ...
]
]
Who needs inheritance?
MOA> I had a lot of "problems" or should I say ... issues... with
MOA> objects when creating the glass dialect, and I was tired of
MOA> having to re-code inits and having to call them after
MOA> creating the object.
That's why LAYOUT does that for you. And that's why you usually
write a make-xxx function.
Another approach would be that of creating a custom type and then
defining your TO action for that type, so that basically you use
TO instead of MAKE to create your values. (If this was supported
by REBOL natively, MAKE would do it for you...)
MOA> does the value at the end of "make block!" really matter i.e.
MOA> could it be 1? is it similar to: [words: copy []]
It doesn't, except for the fact that the interpreter won't have to
reallocate the space when you'll be inserting values in it.
MOA> new is sort of like "self", but on the newly allocated face, right?
Exactly.
MOA> I guess args points to the word block at the first argument word (ptr to a notifer,
for example),
If your VID code is:
Text attach pipe
ARGS will be set to:
args: reduce ['attach pipe]
That's why I used ARGS/2.
>> new/attach args/2
>> next args
MOA> and this return the list past all arguments you need... :-)
Actually, one position back, because LAYOUT is already applying
NEXT to the value you'll return. (This is because it is
optimized
for the case of facets without arguments, where you
just return ARGS without having to worry about advancing it. I
find this behavior a little confusing; I would change it if it
wouldn't break almost every custom style out there. ;-)
Regards,
Gabriele.
--
Gabriele Santilli <[g--santilli--tiscalinet--it]> -- REBOL Programmer
Amigan -- AGI L'Aquila -- REB: http://web.tiscali.it/rebol/index.r