[Laszlo-dev] Problems with the 'in' operator in swf9

P T Withington ptw at openlaszlo.org
Tue Mar 11 12:29:37 PDT 2008


Um, probably behaving as expected.  Non-public attributes are not  
enumerable, and `in` tests for enumerability.  This is supposed to be  
a feature... we need to clean up our usage I think.

So, depending on what you are really trying to do, there are a few  
approaches:

1) Assuming this is the 'send-if-handles' idom, just make sure there  
is a default method for getExpectedAttribute in the base class so you  
can always call it, instead of testing for it's existence.  Or, do an  
`is` test to see if this is of a class (or interface or mixin) that  
supports the protocol.

2) If this is the 'get this attribute if it exists idiom' then I think  
we should change how we do that and not bother testing for the  
existence of the attribute first.  You are allowed to reference non- 
existent attributes, you just need to silence our (and Flex's) warning  
by using ['attribute'] instead of .attribute.  So, where we used to say:

   'foo' in bar && bar.foo ...

let's just say:

   bar['foo'] ...

On 2008-03-11, at 15:16 EDT, Philip Romanik wrote:

>
> I am having problems with the 'in' operator in swf9. I ran a simple  
> test using an arbitrary method in LFCNode:
>
>  var n1 = new LFCNode ();
>  trace ("test1: " + ('getExpectedAttribute' in n1));
>  trace ("test2: " + ('getExpectedAttribute' in LFCNode));
>
>  var n2 = new LzNode (null, null);
>  trace ("test3: " + ('getExpectedAttribute' in n2));
>  trace ("test4: " + ('getExpectedAttribute' in LzNode));
>
>
> When I run this I get 'false' for each test. However, if I insert  
> the word 'public' in front of 'getExpectedAttribute', I get
>
> test1: true
> test2: false
> test3: true
> test4: false
>
> Shouldn't these tests produce 'true' in all cases?
>
>
> Thanks!
>
> Phil
>
>



More information about the Laszlo-dev mailing list