我想使用ObjectUtil.compare()来比较两个字典。当字典是相同的(两个不同的实例,但具有相同的内容),比较失败,一个奇怪的例外:Flex:比较两个相同的字典与ObjectUtil失败?
Error #1034: Type Coercion failed: cannot convert "some_key" to QName.
下面是一些代码,以使其更清晰。
Main.mxml
<?xml version="1.0" encoding="utf-8"?>
<local:MainTest xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:local="*"/>
MainTest.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.
它为什么要比较一个QName的“橘子”键?
说明:如果我打电话给ObjectUtil.compare
给出相同的实例作为参数,它会正常工作。我的意思是,如果我将getMyDictionary()
的返回值保存到变量myDict
中并调用ObjectUtil.compare(myDict, myDict)
,则错误不会出现,并且比较将通过。
任何人都可以点亮一下吗?我做错了吗?
感谢。有趣的事实:我发现这个类的一些版本[这里](http://svn.stefanix.net/filedetails.php?repname=actionscript&path=%2Fflex%2Fframeworks%2Fprojects%2Fframework%2Fsrc%2Fmx%2Futils%2FObjectUtil .as)并猜测:这个版本没有bug!此外,它是1426天的年纪。 – CamilB 2012-04-18 16:29:50