assign by reference (arrays)?
Tom Emerson
osnut at pacbell.net
Fri Mar 22 05:21:00 EST 2002
> -----Original Message-----
> From: Rob Cozens
> [Ben wrote]
> >My first attempt was the equivalent of
> > [...]
> > switch msgList
> > case "use"
> > put aUseInfo into aInfo
> > break
> > case "improve"
> > put aImproveInfo into aInfo
> > break
> > end switch
> > get aInfo[rID]
> > if it = empty then
> > put 1 && mID into aInfo[rID]
[...]
> >But that doesn't work, because 'aInfo' is each time a fresh
> copy of either
> >the 'aUseInfo' array, or the 'aImproveInfo' array.
I think I understand what Ben is after -- to [vaguely] borrow terminology
from other languages, what it appears he wants to do is:
case "use"
put ADDRESS_OF(aUseInfo) into aInfoPointer
...
end switch
add 1 to TARGET_OF(aInfoPointer)[rID]
[note: I'm COMPLETELY new to this "language" -- while I have a number of
other languages under my belt, I'm not entirely sure I want to tackle one
where the global variable "it" changes context from line to line... ;) ]
Does this "language" support pointer variables [and all the nastiness
associated with them] or is this a dead avenue?
A bit of a SWAG here, but from another post, it appears that by using the
"do" command it's possible to "dereference" a variable so long as you know
it's name. If I picked up on the proper usage, it should be something like
this:
case "use"
put "aUseInfo" into aInfo
case "improve"
put "aImproveInfo" into aInfo
end switch
put ("add 1 to " & aInfo & "[rID]") into aStatement
do (it)
[ok, that last line is a cheesy shot at this whole "it" variable business ;)
It should either be "do (aStatement)", or simply replace the last "put" with
"do" and take out the "into aStatement" part -- i.e., do the whole thing
"inline"]
> Try this, Ben,
>
[paraphrased -- please let me know if I'm way off base here...]
[...]
> switch msgList
> case "use"
> put -- (i.e., completely copy)
aUseInfo into -- a temporary variable called
aInfo
> put true into fromUse
[...]
> end switch
-- manipulate the copied array
> get aInfo[msgReplyID]
[...]
-- then copy it back to the original
> if fromUse then put aInfo into aUseInfo else put aInfo into
> aImproveInfo
However it appears even you have doubts about this as you brought up a few
cases in another post where it sounds like this is a less-than-optimal
solution [not even taking into consideration the fact that dereferencing a
pointer takes the same number of cycles & memory space regardless of the
array being 10 bytes or 10 megabytes in size, OTOH, "copies" of entire
arrays...]
More information about the use-livecode
mailing list