Don't understand the meaning of "local"

Jim Ault JimAultWins at
Fri Dec 23 17:23:06 CST 2005

On 12/23/05 12:55 PM, "Jim Hurley" <jhurley at> wrote:

> The persistence of local SCRIPT variables that Chipp's earlier reply
> clears up for me is handlers calling themselves (in x millisec or
> whatever) in  order to achieve asynchronous behavior ( i.e. not
> monopolizing CPU  time and allowing other uses of the  CPU to seek
> in.)

Yes, and since there are two types of LOCAL variables, one could adopt the
naming convention:

g = global, persistent and available to any handler in any script container.
s = script local, persistent but only available for handlers in that script
t = temporary or handler local
p= passed parameter, same as 't'.  Important: this is a new variable
containing a copy of the original contents.  Any changes you make to a 'p'
variable will not change the original.  To do that, you need to 'return
pWhatever' and put it into the original variable.

thus there could be the following script:
[make an new main stack, paste into the stack script, change to browse mode,
and double click, follow the bouncing dialog]
------- start copy here -------------
--notes at the end
global gGristForOneAndAll, gMoreGrist

local sBagOfCandy ="5"
local sPrevCard, sLastLineUsed, sLastMenuChoice
sNien ="9"  --nein, arbeitet nicht

on initializeVariables
  --no need for global declaration while in this script container
  put "four pounds of grist" into gGristForOneAndAll
  put "gum drop, candy cane, peppermint " into sBagOfCandy
  put the number of this card into sPrevCard
  put "So what's your sign" into sLastLineUsed
  put "Surf n' turf" into sLastMenuChoice
  put "gone in a moment" into sNien
end initializeVariables

on mouseDoubleUp
  --if gGristForOneAndAll is empty then initializeVariables
end mouseDoubleUp

on testThis
  answer gGristForOneAndAll
  answer sBagOfCandy
  delete last item of sBagOfCandy
  answer sBagOfCandy
  answer sPrevCard
  answer sLastLineUsed
  answer sLastMenuChoice
  answer sNein

  put testVarsHere() into tReturnedVal
  answer tReturnedVal
  put testVarsHere(" Cindy Lou Who") into tReturnedVal
  answer tReturnedVal
  answer pWhovillian --and not the value
  answer tCaption --and not the value
end testThis

function testVarsHere pWhovillian
put "same script, different handler" & pWhovillian & cr into tCaption
answer tCaption & gGristForOneAndAll
answer tCaption &  sBagOfCandy
delete last item of sBagOfCandy
answer tCaption &  sBagOfCandy
answer tCaption & sPrevCard

--we have used a local temp var = tCaption, good only here
--we have used a parameter var = pWhovillian, good only here
put "Why-what-Where" into the last word of pWhovillian
return "and now... back to the prev handler " & pWhovillian
--return "and now... back to the prev handler"
end testVarsHere 

--and now that this script has been used, the variables
--   gGristForOneAndAll, sBagOfCandy, sBagOfCandy, sPrevCard
--  are live and keep their current values
--  tCaption,  pWhovillian  have been deleted, don't exist, not just empty

------------- end copy

Jim Ault
Las Vegas

More information about the use-livecode mailing list