[REBOL] Re: getting dynamically to object word ...
From: joel:neely:fedex at: 23-Jan-2003 9:51
Hi, Petr,
How about an alternative...?
Petr Krenzelok wrote:
> Hi,
>
> let's suppose I have dynamically generated UI ... now I need to
> create some function to iterate thru UI elements and get their
> values. I found following way works, but I have two questions ...
>
> for i 1 7 1 [for j 0 4 1 [print do join 'fld [i j "/text"]]]
>
> I simply have fld10, fld12, fld13, fld14 .... fld74 ...
>
> 1) Is it safe to use 'do?
> 2) Is there any other way of how to dynamically compose name of already
> existing object and get to its words using 'in?
>
Instead of dynamically composing the name of an existing object, why
not add the object to a collection (e.g. block) at the point of its
creation? Then you can simply iterate over the collection, calling
whatever method(s) you need for any purpose.
I've had *VERY* little time with /View (still waiting for the MacOS/X
version...) but did use that technique in a couple of little demos I
wrote early on. (Please forgive any stylistic ugliness or cut&paste
goofs! ;-) A simplified version of the relevant portions would look
something like this:
btnArray: copy []
...
btnX: none
uiSpec: [
style xbtn button 20x20 "x" goodColor [flipLeft face/user-data]
...
btnX: xbtn user-data 1 do [append btnArray btnX]
btnX: xbtn user-data 2 do [append btnArray btnX]
...
btnX: xbtn user-data 10 do [append btnArray btnX]
...
]
ui: layout uiSpec
run: func [ ] [
repeat btnX 10 [ setBtnArrayText btnX ]
view ui
]
The net effect is that btnArray holds all of the button objects, so
that other functions/methods (e.g. setBtnArrayText) can access the
buttons at any time.
IMHO this has advantages over dynamically composed source/names for
the following reasons:
1) no scope worries
2) faster
3) fewer opportunities for breakage (fewer moving parts)
-jn-
--
----------------------------------------------------------------------
Joel Neely joelDOTneelyATfedexDOTcom 901-263-4446