大家看下面的代码,
去掉case里的注释和不去注释运行的结果完全不一样,不行大家可以看看。
大家可以在这里讨论一下问题的本质,我觉得应该是作用域的问题。
去掉case里的注释和不去注释运行的结果完全不一样,不行大家可以看看。
大家可以在这里讨论一下问题的本质,我觉得应该是作用域的问题。
- package{
- import flash.display.Sprite;
- import flash.events.IOErrorEvent;
- import flash.net.URLLoader;
- import flash.net.URLRequest;
- public class LuaDemo extends Sprite{
- var _name:String="eko";
- var eko:XML=<setting><version>1.0.0</version><folder name="data"/><folder name="diy"/></setting>;
- function LuaDemo(){
- test(eko)
- }
- function test(eko):void
- {
- switch(_name)
- {
- case "eko":
- //{
- var p=eko.folder.(@name=="data");//如果把这里改成 var p="test",也没有问题,只有这样问题才会发生
- trace(p.toXMLString())
- break;
- //}
- }
-
- }
- }
- }
我将代码重新整理后,发现还有有问题. 我进行了一些测试. 发现问题是在swith中不能用E4X的find表达式.
然后我就在adobe forums报了一个bug: https://bugs.adobe.com/jira/browse/ASC-4186.
类似的bug以前有人报过, 不过adobe开发人员都将其closed了, 所以这个应该是一个regression bug.
大家可以在自己的环境下面测试一下这个bug.
然后我就在adobe forums报了一个bug: https://bugs.adobe.com/jira/browse/ASC-4186.
类似的bug以前有人报过, 不过adobe开发人员都将其closed了, 所以这个应该是一个regression bug.
大家可以在自己的环境下面测试一下这个bug.
最精简的代码如下:
复制代码
- package{
- import flash.display.Sprite;
- public class SwitchE4x extends Sprite {
- private var someXML:XML =
- <setting>
- <folder name1="data"/>
- <folder name1="diy"/>
- </setting>;
- function SwitchE4x() {
- switch(true)
- {
- case true:
- //{
- var k1:*= someXML.folder.@name1;
- trace(k1.toString());
-
- var m1:* = k1[0];
- trace(m1.toString());
-
- var k:*= someXML.folder;
- trace(k.toString());
-
- //Here, we can not use E4x "find" syntax
- //but after uncommenting the case block '{' and '}', it will be OK
- //otherwise it will throw m is undefined
- var m:* = k.(@name1 == 'data');
- m.toString();
- //}
- }
- }
- }
- }