[Laszlo-dev] SWF9: Need for with(this)

Donald Anderson dda at ddanderson.com
Fri Dec 7 11:14:09 PST 2007


On Dec 7, 2007, at 1:51 PM, P T Withington wrote:

> On 2007-12-07, at 13:27 EST, Donald Anderson wrote:
>
>>
>> On Dec 7, 2007, at 12:36 PM, P T Withington wrote:
>>
>>> Maybe we just need to think a bit more about how we are going to  
>>> convert the user application into something compilable.
>>>
>>> I guess we decided that the user application needs to be a  
>>> class?  The question is, whether the globals in the old app  
>>> should be instance variables, or, should they be class  
>>> variables?  If LzTestManager were a class variable, then it would  
>>> be 'in scope' without needing `with(this)`.
>>>
>> I just tried
>>  static var LzTestManager
>> and it is not seen.   I need to qualify it ---
>>   DefaultApplication.LzTestManager.failAssertion(errmsg);
>
> That's weird.  My reading of AS3 scope rules is that attributes of  
> the class object are in scope to each other.
> But, do we really have to put the user app in a class?  The AS3  
> book seems to imply you can have code in a package that is not in a  
> class (and that it should behave like our normal expectations for  
> top-level code, except that it will be in a package.
>

Ah, actually you can, it's just not terribly convenient.
If you do this:

    package foo {
        var globalstuff;
        var globalstuff2;

        class Application {
           ...

You can an error that 'A file found in a source-path can not have  
more than one externally visible definition.'
But you can't declare them private either, using private outside of a  
class is not allowed.
You have to have a separate file for each.  I'm keeping a list of  
these 'script variables' now,
and I have infrastructure to handle this, so it wouldn't be hard to  
generate these.

>>> But, I think the real problem here is just that LzTestManager  
>>> needs to be class-ified, rather than trying to simulate the old  
>>> Object way of doing things.  In which case the reference to  
>>> LzTestManager would just need to be replaced with `this`, or,  
>>> removed altogether if you rely on AS3's implicit with this inside  
>>> methods
>>
>> there is an implicit this inside methods, but this is a closure,  
>> so explicit qualification appears to be needed.
>> In java for this situation you have access to anything declared  
>> final, but final cannot be used on vars in AS3.
>>
>> Are you suggesting .lzx code changes?
>
> Yeah.  We should consider that option when the code is written in  
> such an old-fashioned style.

I can go either way - looking at it now, it's very easy to make these  
true global variables,
so I'll do that for now just to get to the next error.

- Don

--

Don Anderson
Java/C/C++, Berkeley DB, systems consultant

Voice:  617-547-7881
Email:  dda at ddanderson.com
WWW:    http://www.ddanderson.com



More information about the Laszlo-dev mailing list