Global Madness
Dan Shafer
revdan at danshafer.com
Tue Mar 22 00:16:16 EST 2005
Howard....
I spent a good bit of time testing this today, and I'm about as
bewildered as you on some levels. That may or may not be comforting.
LOL
There definitely seems to be something wrong with globals in 2.5.1. I
think you are onto something. NOt sure exactly what, though.
I was able to reproduce your problems with the message box "put"
statements precisely. I added another line to your script that reads:
answer "gHeightScaler" is among the items of the globalNames
This dialog consistently returns "false" even though the global has
clearly been defined. At first, I thought perhaps the problem was that
a global ceases to exist when the script in which it is defined is no
longer executing (which is, actually, what I expected to find; I think
that's how HyperCard worked). But I was wrong. When I put an explicit
value into gHeightScaler in the script, then the message box recognizes
it as a global and reports its value correctly. And, as you reported,
thereafter as long as you keep running that script even after
commenting out the explicit value assignment and recompiling, the
global is recognized. It is *almost* as if Rev were insisting the
variable be declared by assigning it a value before it would recognize
it.
So I tried another test. I put this group of lines at the end of your
handler:
put previewHeight/sHeight into gHeightScaler
answer "gHeightScaler" is among the items of the globalNames titled
"After calculating value"
put 0.007312 into gHeightScaler
answer "gHeightScaler" is among the items of the globalNames titled
"After specific value assigned"
put gHeightScaler
answer "gHeightScaler" is among the items of the globalNames titled
"After putting to msg"
I commented and uncommented these lines in pairs, removed the stack
from memory and restored it, quit Rev and restarted, and I concluded
that:
1. Rev does not recognize the global in any circumstance unless it has
had an explicit value put into it at least once.
2. Thereafter, it behaves correctly until you quit Rev and re-launch
with the explicit value assignment lines commented out, in which case
it reverts to its incorrect behavior of not recognizing the global for
the purposes of the message and for including the global in the
globalNames.
3. However -- and this is where it gets really mysterious to me -- it
NEVER fails to pass the correct value of the global to other handlers
in the same script, no matter whether I've "initialized" it. So I was
NOT able to reproduce that particular aspect of the behavior you
mentioned.
This means, I think, that while globals appear not to work or register
correctly in the IDE, they work fine in the actual stacks (and
presumably the apps created from those stacks). Obviously, if you check
the globalNames in a script to determine whether a given global has yet
been defined, you will get an erroneous result if this is indeed a bug.
Just for grins, I went back to 2.5 and 2.2.1 and tested this with
identical results. So this is the way globals have behaved for a long
time, which means it may be intentional and simply obscure.
Dan
On Mar 21, 2005, at 7:58 PM, Howard Bornstein wrote:
> On Tue, 22 Mar 2005 14:15:56 +1200, Glen Boyd <glenb at napier.govt.nz>
> wrote:
> ?
>>
>> Have you declared this global in all stacks that require access to it?
>> If I recall correctly you need to specify the global in each stack
>> that
>> you wish to use the variable globally in.
>
>
> Yes. If you saw my test script I declared it at the beginning of the
> handler and only called it from that handler. I'd really appreciate it
> if someone could test this on another machine. It's a simple script,
> it's right there for you to copy and paste, and it just goes into a
> button.
>
> Thanks.
> --
> Regards,
>
> Howard Bornstein
> -----------------------
> www.designeq.com
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> http://lists.runrev.com/mailman/listinfo/use-revolution
>
More information about the use-livecode
mailing list