Actionscript 3 Flash Builder 4.6中E4X过滤的奇怪行为

Actionscript 3 Flash Builder 4.6中E4X过滤的奇怪行为,actionscript-3,flash-builder,e4x,Actionscript 3,Flash Builder,E4x,我在我的程序中有一个非常奇怪的行为,在尝试了很多东西并在这里搜索可能的答案但没有成功后,我决定在这里作为一个新问题提问。 这就是我的问题: 我使用的是describeType(),因此得到了一个描述我的类的E4XXML对象。我的类有一个没有参数的元数据[表]: [Table] class MyClass extends ORM { [...] 调试正确时的XML对象: trace(xmlDescription.metadata.@name[0]); // output "Table"

我在我的程序中有一个非常奇怪的行为,在尝试了很多东西并在这里搜索可能的答案但没有成功后,我决定在这里作为一个新问题提问。 这就是我的问题:

我使用的是describeType(),因此得到了一个描述我的类的E4XXML对象。我的类有一个没有参数的元数据[表]:

[Table]
class MyClass extends ORM
{
    [...]
调试正确时的XML对象:

trace(xmlDescription.metadata.@name[0]);
// output "Table"
trace(xmlDescription.metadata.(@name == "Table").length());
// output... 0!!!!
同时检查XML对象,我得到了所需节点的正确结构:

<metadata name="Table"/>

提前谢谢


PS:我正在使用Flash Builder 4.6,在Facebook上分享了这个问题后,我根本不希望得到任何答案,我从一位老同事那里得到了一个答案:

显然,Flash Builder 4中出现了一个bug,我的问题就在它的范围内。要“修复”它,必须使用字符串类型的局部变量才能使其工作。 因此,按如下方式替换我的代码,使其正常工作:

// before:
public function uniqueMetadata( metadataName : String ) : ReflectionMetadata
{
    var x : XML = xmlDescription.metadata.(@name == metadataName)[0];
    // x is null here

// after
public function uniqueMetadata( metadataName : String ) : ReflectionMetadata
{
    var s : String = metadataName,
        x : XML = xmlDescription.metadata.(@name == s)[0];
    // x is not null and contain the desired node!
是的,奇怪的解决方法。我真的不明白这样的错误怎么会发生

不管怎样,现在它开始工作了,我在代码中寻找其他类似的地方,在做一些E4X过滤之前,我需要复制相同类型的局部变量中的参数值

// before:
public function uniqueMetadata( metadataName : String ) : ReflectionMetadata
{
    var x : XML = xmlDescription.metadata.(@name == metadataName)[0];
    // x is null here

// after
public function uniqueMetadata( metadataName : String ) : ReflectionMetadata
{
    var s : String = metadataName,
        x : XML = xmlDescription.metadata.(@name == s)[0];
    // x is not null and contain the desired node!