0

我想使用 ObjectUtil.compare() 比较两个字典。当字典相同时(两个不同的实例,但内容相同),比较失败并出现奇怪的异常:

Error #1034: Type Coercion failed: cannot convert "some_key" to QName.

这里有一些代码让它更清楚。

主.mxml

<?xml version="1.0" encoding="utf-8"?>
<local:MainTest xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:local="*"/>

主测试.as

package {
  import spark.components.Application;
  import flash.utils.Dictionary;
  import mx.utils.ObjectUtil;

  public class MainTest extends Application {
    public function MainTest() {
      super();
      trace(ObjectUtil.compare(getMyDictionary(), getMyDictionary()));
    }

    private function getMyDictionary() : Dictionary {
      var myDictionary : Dictionary = new Dictionary();
      myDictionary["oranges"] = "orange";
      myDictionary["kiwis"] = "green";
      return myDictionary;
    }
  }
}

如您所见,构造函数调用ObjectUtil.compare了两个字典。该getMyDictionary()方法显然每次都返回新的、相同的字典(当然,不同的实例,但它们是相同的)。当代码到达 时ObjectUtil.compare(),调试器会打印以下错误:

Error #1034: Type Coercion failed: cannot convert "oranges" to QName.

为什么要将“oranges”键与 QName 进行比较?

注意:如果我调用ObjectUtil.compare提供与参数相同的实例,它可以正常工作。我的意思是,如果我将 的返回值保存getMyDictionary()到变量中myDict并调用ObjectUtil.compare(myDict, myDict),则不会出现错误,并且比较会通过。

任何人都可以解释一下吗?我做错了吗?

4

2 回答 2

1

这是 Flex sdk 中的一个错误。Object如果您不Dictionary打算使用除String.

private function getMyDictionary() : Object {
      var myDictionary : Object = new Object();
      myDictionary["oranges"] = "orange";
      myDictionary["kiwis"] = "green";
      return myDictionary;
}
于 2012-04-18T11:36:23.820 回答
0

当我浏览文档时,我发现了这个,这可能有帮助

mx.utils.ObjectUtil.compare(a:Object, b:Object, depth:int=-1):int

比较对象并返回一个整数值,指示第一项是否小于或等于第二项。此方法将递归比较嵌套对象的属性,并在找到非零结果后立即返回。默认情况下,此方法将递归到任何属性的最深层次。要更改用于比较的深度,请为深度参数指定一个非负值。参数:一个对象。b 对象。depth 指示执行比较时应该递归多少级别。将此值设置为 0 以仅对每个属性的原始表示进行浅比较。

例如:

   var a:Object = {name:"Bob", info:[1,2,3]};
   var b:Object = {name:"Alice", info:[5,6,7]};
   var c:int = ObjectUtil.compare(a, b, 0);

在上面的示例中,在进行比较时,a 和 b 的复杂属性将通过调用 toString() 来展平。在这种情况下,info 属性将在执行比较时转换为字符串。

回报:

如果 a 和 b 为 null、NaN 或相等,则返回 0。如果 a 为空或大于 b,则返回 1。如果 b 为 null 或大于 a,则返回 -1。

语言版本:3.0

播放器版本:Flash 9、AIR 1.1

产品版本:Flex 3

于 2012-04-20T13:44:34.150 回答