global variable change in substack not available to main stack

Slava Paperno slava at lexiconbridge.com
Sun Jul 10 10:46:21 EDT 2011


Thanks again, Ian. Yes, I followed that "defining and using globals in an
application" discussion very closely, and of all the great ideas that were
shared I liked the accessors and the arrays best.

About my post from 8 hours ago: I apologize for wasting people's time. It
was what we like to call "user error" (user being me in this case): A
handler was forwarding the openCard message which in turn reinitialized the
globals, and thus the new value got lost. My only excuse is that it was 3 AM
on a Sunday.

But this wasn't a total waste of time for me. I have learned that User Guide
is correct, and indeed the global command (declaration) can be included
either at the top of the script or inside a handler. If it is used at the
top of the script, it is available to all handlers in the script. I like
declaring it in every handler because then I can see at a glance, w/o
scrolling, a list of all variables (global and local) that are used in the
handler. I like short, self-contained, self-documented, portable handlers.
Just a matter of taste.

 Thanks!

Slava

> -----Original Message-----
> From: use-livecode-bounces at lists.runrev.com [mailto:use-livecode-
> bounces at lists.runrev.com] On Behalf Of Ian McKnight
> Sent: Sunday, July 10, 2011 4:03 AM
> To: How to use LiveCode
> Subject: Re: global variable change in substack not available to main
stack
> 
> Hi Slava
> 
> I understand what you mean about portability - I've been caught out myself
> many times reusing a handler and forgetting to copy the global
declarations at
> the top of the script but you may find a post by Richard Gaskin to this
list a few
> days ago useful for future projects. I paste his post here for convenience
(the
> subject of the thread is - "defining and using globals in an application"
> 
> >-- snip
> 
> On 10 July 2011 08:39, Slava Paperno <slava at lexiconbridge.com> wrote:
> 
> > Thanks Stephen and Ian. It is true that I declare each global
> > variables inside every handler where it is used. I have a sizable
> > application now where this strategy is employed everywhere. In doing
> > so I followed this statement in the User Guide to 4.6.2:
> >
> > 5.5.4 Global Variables (page 143, below the pink Important box) "You
> > can use the global command either inside a handler, or outside any
> > handler at the top of a script (like a script local)."
> >
> > In choosing between these two recommendations I decided that putting
> > the global declaration inside the handler makes the handler more
portable.
> >
> > But I'll follow your advice and mess with this some more after a good
> > night's sleep.
> >
> > Gratefully,
> >
> > Slava
> >
> > > -----Original Message-----
> > > From: use-livecode-bounces at lists.runrev.com [mailto:use-livecode-
> > > bounces at lists.runrev.com] On Behalf Of Ian McKnight
> > > Sent: Sunday, July 10, 2011 2:23 AM
> > > To: How to use LiveCode
> > > Subject: Re: global variable change in substack not available to
> > > main stack
> > >
> > > Hi
> > >
> > > I just recreated you scripts in a stack.
> > >
> > > Stephen Barncard is correct the more usual place to put the global
> > > statement is outside the handlers at the top of the script.
> > >
> > > However. Your original card script is incomplete since the 'put'
> > > statement
> > > needs to be put into a handler.
> > >
> > > eg
> > > global gBgColor
> > >
> > > on openstack -- or preOpenStack or whatever
> > >    put 0, 0, 0 into gBgColor
> > > end openstack
> > >
> > > When I made this change the gBgColor reflects changes made in the
> > > mousedown script.
> > >
> > >
> > > BTW I know that it works the way you have it but when using colour
> > > info like
> > > 0,0,0 I would recommend putting it into quotes "0,0,0"
> > >
> > > HTH
> > >
> > > On 10 July 2011 07:02, Slava Paperno <slava at lexiconbridge.com> wrote:
> > >
> > > > In openCard script of the main stack:
> > > >
> > > > global gBgColor
> > > > put 0, 0, 0 into gBgColor
> > > >
> > > >
> > > > In a button script in a substack:
> > > >
> > > > on mouseUp
> > > >        global gBgColor
> > > >
> > > >        answer color with gBgColor --white is selected
> > > >        put it into gBgColor
> > > >
> > > >        put gBgColor & cr after msg
> > > >        --255, 255, 255
> > > > end mouseUp
> > > >
> > > > In the Variables panel below script editor (after it is
> > > > refreshed), gBgColor is shown to be 0, 0, 0.
> > > >
> > > > In the Message box:
> > > >
> > > > put gBgColor
> > > > --0, 0, 0
> > > >
> > > >
> > > > In other words, the change to a global variable that is made in a
> > > substack
> > > > is not available to the global variable of the same name in a
> > > > script
> > > in the
> > > > main stack.
> > > >
> > > > Just last week I carefully followed the discussion of the use of
> > > global
> > > > variables (and even participated a little by quoting the User
> > > > Guide
> > > on the
> > > > availability of globals to all substacks), but now I see the same
> > > problem
> > > > that was reported by the original poster.
> > > >
> > > > Is it just me now? Or is it the late hour?
> > > >
> > > > Slava






More information about the use-livecode mailing list