• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag
 

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: *Very* strange script / global variable behavior
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: *Very* strange script / global variable behavior


  • Subject: Re: *Very* strange script / global variable behavior
  • From: has <email@hidden>
  • Date: Mon, 28 Feb 2005 13:56:04 +0000

Nigel Garvey wrote:

Script objects are definitions that are only initialised when the code
containing them is run, so Outer only comes into being just before the
'set x to Outer' line.

Incorrect. The script object in the Outer slot is created when that slot is initialised, i.e. when the script object whose slot that is is created. And this script object, being the top-level script object, is created at compile-time; ergo the script object in Outer is also created at compile-time.


Short answer is: it's a bug (AppleScript has a lot of those), presumably in how AppleScript binds variables at compile-time (done for efficiency, but in a rather braindead manner that causes at least one other bug I know of).

The simplest solution would be to redesign the code to avoid the problem in the first place. Note that AppleScript tends to work a bit more reliably when you don't stress it, and good design tends to stress it a bit less than bad design does. While it's hard to judge without seeing the original code, the example's code structure does look rather odd, particularly with respect to encapsulation (or lack thereof). From a good design point of view, it'd make more sense to encapsulate theState and theScript within Outer:

script Outer
	property theState : 0
	property theScript : missing value

	on initialize()
		script Inner
			on showTheState()
				display dialog "State " & theState
			end showTheState
		end script
		set theScript to Inner
	end initialize
end script

set x to Outer

set Outer's theState to 1
tell Outer to initialize()
tell Outer's theScript to showTheState()
set Outer's theState to 2
tell Outer's theScript to showTheState()


As well as being a more logical design it also happens to avoid the OP's bug, which is nice.


HTH

has
--
http://freespace.virgin.net/hamish.sanderson/
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Applescript-users mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


  • Prev by Date: Re: What is this?
  • Next by Date: Re: Text size of Finder window
  • Previous by thread: Re: *Very* strange script / global variable behavior
  • Next by thread: Re: *Very* strange script / global variable behavior
  • Index(es):
    • Date
    • Thread