[REBOL] Re: How to remove words from objects?
From: luke:marmaladefoo at: 13-Jan-2004 18:25
thanks everyone for your contributions!
I have in the meantime implemented my own approach
which works for me (similar to the ones suggested - see
below) using the "long way round" of reconstructing the
object. Its not very pretty (since it involves a "do" on a
dynamically built string) but it works for me, as do most of
your helpful suggestions.
I dont understand Gregg what you mean when you say
the context of an object isnt dynamic. It probably goes
beyond my current level of understanding of how REBOL
But if so, then how does that explain why can I do this
(but not reverse the action):
obj: make object [a: 1]
;---add a new word to the object
obj: make obj [b: 2]
> L> I'm trying to dynamically add and remove words from an
> L> object...I know I could dynamically reconstruct it from scratch,
> L> but that is not very elegant. There must be a better way...
> Not really. The issue lies in the fact that the context of an object
> isn't dynamic; you can't add or remove things. The global context in
> REBOL is the only special case of a dynamic context I believe.
> You can get tricky and work around it, by including a block in your
> object and using that as kind of a sub-context--because blocks are
> resizable. I think Ladislav or Joel posted a dynamic object example
> here at one time. I didn't find one on REBOL.org in a quick search,
> maybe somebody submit one if they have it handy.
This is the way I did it:
object-remove-word: func [object word /local obj-result obj-copy-string action] [
obj-copy-string: copy ""
foreach w next first object [
if not (w = word) [
append obj-copy-string rejoin [
" " :w ": " mold :value newline
action: rejoin ["make object! [" obj-copy-string "]" ]
obj-result: do action
All the best
Various gadgets widgets, links and chat