ObjectUtil.compare() を使用して 2 つの辞書を比較したいと考えています。辞書が同一の場合 (2 つの異なるインスタンスですが、内容は同一)、比較は奇妙な例外で失敗します。
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="*"/>
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
2 つの辞書を呼び出します。このgetMyDictionary()
メソッドは、明らかに新しい同一の辞書を毎回返します (もちろんインスタンスは異なりますが、それらは同一です)。コードが に到達するObjectUtil.compare()
と、デバッガーは次のエラーを出力します。
Error #1034: Type Coercion failed: cannot convert "oranges" to QName.
「oranges」キーを QName と比較する必要があるのはなぜですか?
注:ObjectUtil.compare
同じインスタンスを引数として指定して呼び出すと、正しく機能します。getMyDictionary()
の戻り値を変数に保存してmyDict
呼び出すとObjectUtil.compare(myDict, myDict)
、エラーは表示されず、比較はパスします。
誰でも光を当てることができますか?私はそれを間違っていますか?